Http Response in Array speichern

  • Antworten:4
Gelöschter Account
  • Forum-Beiträge: 136

31.08.2011, 10:47:57 via Website

Hallo zusammen,

habe folgendes Problem. Ich übergebe beim starten der App Variablen an eine php datei auf meinem Server. Diese checkt dann bestimmte Daten in der Datanbank und gibt mir mehrere echos zurück. Zum Beispiel:

echo $1;
echo $2;
.......

Nun bekomme ich alle ausgaben zusammen in einem String zurück, allerdings bräuchte ich jede einzelnt jede in einem Array abzuspeichern. Muss ich die Ausgabe in der php Datei ändern oder das Empfangen in meiner App? Habt ihr hierzu ein Beispiel?

Grüße,
Malte

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

31.08.2011, 10:56:06 via Website

Da gibts so viele Möglichkeiten.

String.split(String regex) kann z.B. einen String an bestimmten Trennzeichen trennen und liefert einen String Array als Ergebnis.

Musst halt nur drauf achten, dass split eine Regex als Parameter erwartet.
Du musst also gucken, dass du deinen Zeilenumbruch, der ja das Trennzeichen darstellt, gscheit maskierst.

Doku zu Java Regex: http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

Antworten
Gelöschter Account
  • Forum-Beiträge: 136

31.08.2011, 12:22:40 via Website

Danke für deine Antwort, habs nun allerdings anders gelöst :) Nach jedem echo (echo $1."\n") setzte ich ein "\n", dass funktionierte. Allerdings habe ich ein Problem. Undzwar weiß ich vorab nicht, wieviele Daten habe, somit kann ich meine Schleife zZ. auch nur so lange durchlaufen lassen, wie ich es vorgebe.

Ich kann mir zwar ausgebenlassen, wieviele zeichen die Rückgabe hat, allerdings bringt mir das nichts. Könnte ihr mir hierbei noch helfen? Also wie ich die anzahl der einzelnen Rückgaben bekome. Hier mein Code:

1final HttpClient httpclient = new DefaultHttpClient();
2 final HttpPost httppost = new HttpPost("DIE URL");
3
4 final ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
5 nameValuePairs.add(new BasicNameValuePair("email","MEINE EMAIL"));
6
7 try {
8 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
9 final HttpResponse response = httpclient.execute(httppost);
10 HttpEntity entity = response.getEntity();
11 is = entity.getContent();
12
13 } catch (UnsupportedEncodingException e) {e.printStackTrace();}
14 catch (ClientProtocolException e) {e.printStackTrace();}
15 catch (IOException e) {e.printStackTrace();}
16
17 try{
18 reader = new BufferedReader(
19 new InputStreamReader(is,"UTF-8"),8);
20
21 sb = new StringBuilder();
22 sb.append(reader.equals("count"));
23
24 for(int h = 0; h < 14; h++) {
25 final HashMap<String, Object> map = new HashMap<String, Object>();
26
27 map.put("name",reader.readLine());
28 server_list.add(map);
29
30 }

Bei der untersten Schleife, wo "h < 14" steht, soll dann anstatt der 14 der Wert rein, wie viele echos ich sozusagen habe. Hoffe das war verständlich :P

Grüße,
Malte

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

31.08.2011, 13:01:21 via Website

split() würde genau das Problem doch lösen :unsure:

Die Klasse EntityUtils kann die Antwort eines HttpClient request direkt in einen String konvertieren und berücksichtigt automatisch das Enconding.
Mach das, dann wende darauf split an und du hast einen Array mit allen Zeilen der Antwort.

— geändert am 31.08.2011, 13:09:04

Antworten
Markus B.
  • Forum-Beiträge: 636

31.08.2011, 23:28:30 via App

Hi,
noch einfacher wäre es wenn du z.B. einen String nach dem JSON Pattern zurück geben würdest. Für die Verarbeitung dieses Formates gibt es im Android SDK fertige Komponenten.

Gruß,
Markus

Antworten