Ich habe ein Midlet mit einer HttpConnection zu einem Servlet. Diese Verbindung funktioniert auch einwandfrei. Das Servlet liest ein StringArray[] aus einer Datenbank. Weiters wird dieses StringArray[] an das Midlet übergeben.
Midlet:
Code:
http = (HttpConnection) Connector.open(url);
http.setRequestMethod(HttpConnection.GET);
iStrm = http.openInputStream();
boolean ret;
ret = processServerResponse(http, iStrm);
// MEthode processServerResponse
private boolean processServerResponse(HttpConnection http, InputStream iStrm) throws IOException{
...
if (http.getResponseCode() == HttpConnection.HTTP_OK)
{
// 2) Get header information - none
// 3) Get body (data)
int length = (int) http.getLength();
String str;
if (length != -1)
{
byte servletData[] = new byte[length];
iStrm.read(servletData);
str = new String(servletData);
}
else // Length not available...
{
ByteArrayOutputStream bStrm = new ByteArrayOutputStream();
int ch;
while ((ch = iStrm.read()) != -1)
bStrm.write(ch);
str = new String(bStrm.toByteArray());
bStrm.close();
}
......
}
Da ich über einen InputStream einlese enthält der String str nur die Adresse des StringArrays[] ........
Kann mit jemand sagen wie ich auf das StringArray[] wieder zugreifen kann, weil die Adresse hab ich ja.....
ähm der sollt eigentlich die bytes in nen string decodieren, steht sogar in der API:
Constructs a new String by decoding the specified array of bytes using the platform's default charset. The length of the new String is a function of the charset, and hence may not be equal to the length of the byte array.
The behavior of this constructor when the given bytes are not valid in the default charset is unspecified. The CharsetDecoder class should be used when more control over the decoding process is required.
Ist StringArray eine eigene Klasse oder nur String[] ... Wie auch immer...
Wie sendet denn das Servlet die Daten? Als ObjectStream...Oder als "normalen" Stream (Strings getrennt durch irgendeinen Tokenizer) ... Schau doch zuerst mal, wie die Daten überhaupt gesendet werden...
Das funzt so nicht, da out.print(data); einfach die toString() Methode des data-Objects ausführt.
Da musst du schon jeden Wert einzeln senden:
Code:
PrintWriter out = res.getWriter();
for (int n=0;n<data.length;out.println(n++));
Einlesen kannst dus dann so:
Code:
List list= new ArrayList();
BufferedReader in = new BufferedReader(new InputStreamReader(iStrm));
for (String buffer;(buffer = in.readLine()) != null;list.add(buffer));
in.close();
String[] data = (String[]) list.toArray(new String[list.size()]);
Du kannst natuerlich auch die List direkt verwenden...