HttpURLConnection post array

  • Antworten:7
Rolf Baumann
  • Forum-Beiträge: 24

21.11.2012, 13:57:44 via Website

Ich möchte 2 arrays (zeit und ort) mittels HttpURLConnection post an meinen Server senden, wo sie mit php eingelesen und weiterverarbeitet werden.
Grundsätzlich funktioniert das Ganze, doch wird der Server auch bei kurzen Arrays (1-2 Daten, d.h. i im Code ist 1 oder 2) durch einen unendlichen Array blockiert. Ich versuche, die arrays in der Variablen "daten" abzubilden und so zu übergeben. Wahrscheinlich liegt dort ein Fehler.

Ich dankbar für jede Hilfe.

Der zweite Teil des codes lautet:
1private String downloadUrl(URL url) throws IOException {
2 InputStream is = null;
3 // Only display the first 500 characters of the retrieved web page content.
4 int len = 500;
5
6 try {
7 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
8 conn.setReadTimeout(10000 /* milliseconds */);
9 conn.setConnectTimeout(15000 /* milliseconds */);
10 conn.setRequestMethod("POST");
11 conn.setDoInput(true);
12 conn.setDoOutput(true);
13 conn.setChunkedStreamingMode(0);
14
15 conn.connect();
16
17 String daten="";
18 for (int j = 0; j < i; j ++){
19 if(j>0){
20 daten=daten + "&";
21 }
22 daten=daten + "zeit[]=" + URLEncoder.encode(zeitArray[j], "UTF-8") + "&ort[]=" + URLEncoder.encode(ortArray[j], "UTF-8");
23 }
24
25 OutputStream wr = new BufferedOutputStream(conn.getOutputStream());
26 wr.write(daten.getBytes());
27 wr.flush ();
28 wr.close ();
29
30 is = conn.getInputStream();
31
32 // Convert the InputStream into a string
33 String contentAsString = readIt(is, len);
34 return contentAsString;
35
36 // Makes sure that the InputStream is closed after the app is finished using it.
37 } finally {
38 if (is != null) {
39 is.close();
40 }
41 }
42 }
43
44
45 public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException{
46 Reader reader = null;
47 reader= new InputStreamReader(stream, "UTF-8");
48 char[] buffer = new char[len];
49 reader.read(buffer);
50 return new String(buffer);
51 }


Der php Teil beginnt wie folgt
1if(isset($_POST['zeit'])) $zeitarray=$_POST['zeit'];
2if(isset($_POST['ort'])) $ortarray=$_POST['ort'];

Antworten
Stefan S.
  • Forum-Beiträge: 560

21.11.2012, 14:59:18 via Website

Braucht es die [] bei zeit[]=" ? Kenn mich hier zu wenig aus.

Hast du schon mal überlegt das Ganze via JSON zu lösen?

Antworten
Rolf Baumann
  • Forum-Beiträge: 24

21.11.2012, 15:29:57 via Website

ich habe schon alle Varianten ausprobiert, leider ohne Erfolg:
1String daten="zeit=20:12&ort=2";
2String daten="zeit[0]=20:12&ort[0]=2";
3String daten="zeit[]=20:12&ort[]=2";

Ich habe schon von JSON gehört, kenne mich da aber nicht so aus (bin generell noch Anfänger). Ich habe ein Beispiel von JSON gesehen, doch ist mir da auch nicht klar, wie ich den Datenstring formulieren muss.

Antworten
Stefan S.
  • Forum-Beiträge: 560

22.11.2012, 06:51:05 via Website

Rolf Baumann
ich habe schon alle Varianten ausprobiert, leider ohne Erfolg:
1String daten="zeit=20:12&ort=2";
2String daten="zeit[0]=20:12&ort[0]=2";
3String daten="zeit[]=20:12&ort[]=2";

Ich habe schon von JSON gehört, kenne mich da aber nicht so aus (bin generell noch Anfänger). Ich habe ein Beispiel von JSON gesehen, doch ist mir da auch nicht klar, wie ich den Datenstring formulieren muss.

Zuerst ein json-Object erstellen
1json = new JSONObject();
2 json.put("ID", sRefId);
3 json.put("Action", "Answer");
4 json.put("Antwort", value);

Dann via StringEntity das Objekt an den HTTP übergeben
1se = new StringEntity("json" +obj.toString(), "utf-8");
2 se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
3 se.setContentType("application/json;charset=UTF-8");
4
5 httpPost.setEntity(new ByteArrayEntity(obj.toString().getBytes("UTF8")));
6
7 httpPost.setHeader("Accept", "application/json");
8 httpPost.setHeader("Content-type", "application/json");
9 httpPost.setHeader("json", obj.toString());

Das wars

— geändert am 22.11.2012, 06:51:19

Antworten
Rolf Baumann
  • Forum-Beiträge: 24

22.11.2012, 22:27:36 via Website

Vielen Dank für deinen Input. Noch eine kurze Frage: Wie wird das Objekt mit 2 Arrays definiert?

Ist es möglich die Strings wie folgt zu verknüpfen: ortArray().toString() + zeitArray().toString()

Ich bin da recht unsicher.

Antworten
Stefan S.
  • Forum-Beiträge: 560

23.11.2012, 07:24:55 via Website

Probiert habe ich es selber noch nie doch ich denke das müsste schon gehen.
Einfach zwei StringEntitys machen und diese dann separat via setEntity und setHeader anfügen.

Antworten
Rolf Baumann
  • Forum-Beiträge: 24

23.11.2012, 23:26:55 via Website

Ich habe immer noch Mühe, meine Arrays in das JSON Objekt einzubauen:

Bei folgendem Versuch
1JSONObject obj = new JSONObject();
2obj.put(1, "Hamburg");
3obj.put(2, "Berlin");
4obj.put(3, "Dresden");

fehlt die Bezeichnung "ort" oder wie ich das Array auch immer nennen möchte. Dies ist notwendig, weil ich 2 Arrays (ein Ortarray, ein Zeitarray: 1: 20.00 Uhr; 2: 23:00 Uhr, etc) in das JSON Objekt einbauen möchte.

Habe dies stundenlang versucht und bin für jeden Input dankbar.

Antworten
Rolf Baumann
  • Forum-Beiträge: 24

26.11.2012, 14:00:28 via Website

Ich konnte das Problem lösen: mein ursprünglicher Code war korrekt, doch habe ich im php Teil einen Fehler gehabt.

Nochmals herzlichen Dank für die Unterstützung.

Antworten