[Java & Android] OptionalDataException

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Snobbieh
  • Registratie: Juli 2009
  • Laatst online: 25-09 18:57
Ik zit nu al een tijdje op een fout te zoeken dat ik niet kan vinden :(
Ik ben momenteel een cliënt-server applicatie aan het maken.
Het is een programma waarbij de server geschreven is in Java, en de cliënt een Android applicatie is.
Voor ik data begin door te sturen, stuur ik eerst een String door om aan te geven welke data er binnen gaat komen. Echter, wanneer ik die String wil inlezen in de Java server, krijg ik een OptionalDataException.

Na wat zoekwerk op Google en debugging, stelde ik vast dat ik een primitieve datatype zou doorsturen (eof staat op false en length is 10 bytes).
Echter, String is geen primitief datatype en implementeert ook Serializable (zoals jullie natuurlijk weten :+).
Ik heb ook naar oplossingen gezocht maar geen enkel bracht soelaas aan dit probleem.
Misschien kunnen jullie helpen?

Java: client
1
2
3
4
5
     ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream());
     ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
     
     output.writeObject("LOGIN");
     output.flush();


socket is de socket waarmee verbonden is naar de server :) Dit stuurt dus de string "LOGIN" door.

Java: server
1
        String inputCommand = (String) input.readObject();


Server heeft hier wel de cliënt geaccepteerd en draait perfect met de cliënt tot ik data begin te versturen.

Al bedankt voor de hulp!
Natuurlijk heb ik stukken code weggelaten om het niet te complex te maken.

I7 2600K - 8GB - M550 256GB - GTX 670


Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

De objectstreamers zijn nogal gevoelig voor versie verschillen. Er is een kans dat de String uit android niet overeenkomt met die vanuit Java. Wellicht kun je het op een meer gestandaardiseerde manier versturen, met bijvoorbeeld een BufferedReader/Writer o.i.d.?

Acties:
  • 0 Henk 'm!

  • Snobbieh
  • Registratie: Juli 2009
  • Laatst online: 25-09 18:57
Android is gebaseerd op 1.5 terwijl wij in 1.7 werken.
Dit zou dus de oorzaak kunnen zijn?

I7 2600K - 8GB - M550 256GB - GTX 670


Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Dat zou zomaar het geval kunnen zijn. Wilt uiteraard niet zeggen dat het niet mogelijk is. Je zult dus ipv. ruwe (serializable) objecten een andere manier moeten zoeken om gegevens te versturen. Zie bijvoorbeeld de DataInputStream klasse:

"A data input stream lets an application read primitive Java data types from an underlying input stream in a machine-independent way."

Nu weet ik niet wat de requirements zijn, maar mocht je alleen tekst willen versturen dan zijn daar speciale klassen voor beschikbaar.

Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 03-09 23:24
Als je een string wilt versturen kun je beter eerst omzetten in een byte of char array en dat versturen.

Acties:
  • 0 Henk 'm!

  • Snobbieh
  • Registratie: Juli 2009
  • Laatst online: 25-09 18:57
Heb ik gedaan en het werkt nu :)
Nu nog de compatibility problemen oplossen :(
Bedankt voor de hulp!

I7 2600K - 8GB - M550 256GB - GTX 670

Pagina: 1