Ich habe ein Array von Objekten, die ich versuchen, durch eine API zu senden. Das erste Objekt wird durchlaufen, wie es sollte, und ich bekomme dann:URLConnection - Kann Körper nicht schreiben, nachdem die Antwort gelesen wurde
java.net.ProtocolException: cannot write request body after response has been read
ich ziemlich sicher bin, es ist nur die Reihenfolge, in der ich Dinge tue, aber ich bin immer noch lernen Android und haben versucht, eine Stunde und ein bisschen jetzt herauszufinden.
Ich dachte, ich würde an euch um Hilfe wenden! Ich muss jede Antwort auf den POST erhalten, damit ich es für ein ID-Feld pse, das später verwendet werden kann. Sie werden sehen, dass ich es in meiner FOR-Schleife analysiere und dann die IDs in einer Liste abspeichere, die ich später durchlaufen werde.
-Code für die POST unter:
try {
url = new URL("##Edited Out##");
conn = (HttpsURLConnection) url.openConnection();
// Create the SSL connection
sc = SSLContext.getInstance("TLS");
sc.init(null, null, new SecureRandom());
conn.setSSLSocketFactory(sc.getSocketFactory());
// Use this if you need SSL authentication
String userpass = "##Edited Out##:##Edited Out##";
String basicAuth = "Basic " + Base64.encodeToString(userpass.getBytes(), Base64.DEFAULT);
conn.setRequestProperty("Authorization", basicAuth);
conn.setRequestProperty("Content-Type", "application/json;odata=verbose");
// set Timeout and method
conn.setReadTimeout(7000);
conn.setConnectTimeout(7000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
JSONObject juo = new JSONObject();
for (int i = 0; i<objects.size(); i++){
juo.put("Field1", "Data for field 1 here");
juo.put("Field2", "Data for field 2 here");
juo.put("Field3", "Data for field 3 here");
wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(juo.toString());
wr.flush();
wr.close();
Log.d("ITEM STRING", juo.toString());
BufferedReader br = new BufferedReader(new InputStreamReader(
conn.getInputStream(), "utf-8"));
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
Log.d("HTTP BR", "" + sb.toString());
jObject = XML.toJSONObject(sb.toString());
Log.d("JSON OBJECT", jObject.toString());
JSONObject menuObject = jObject.getJSONObject("entry");
JSONObject contentObject = menuObject.getJSONObject("content");
JSONObject propertiesObject = contentObject.getJSONObject("m:properties");
JSONObject productObject = propertiesObject.getJSONObject("d:Product_Id");
String retProId = productObject.getString("content");
partIDs.add(retProId);
Log.d("PART ID", retProId);
}
int HttpResult = conn.getResponseCode();
Log.d("HTTP RESULT", String.valueOf(HttpResult));
Log.d("HTTP RESPONSE", conn.getResponseMessage());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
EDIT: In Bezug auf doppelten Kommentar unten Der Fehler, den ich empfangen habe, ist etwas anders. Ich verstehe das Prinzip davon, aber mein .getRespondeCode ist außerhalb meiner for-Schleife, und es sollte durchlaufen werden. Aber es ist nicht.
Dieser Fehler tritt auf, wenn objects.size> = 2
Ich muss die Server-Antwort-String erhalten für jedes Objekt POSTed, da sie eine ID enthält i analysieren müssen.
Mögliches Duplikat [schreiben Kann nicht ausgegeben nach der Eingabe zu lesen] (http://stackoverflow.com/questions/11413028/cannot-write-output-after-reading-input) – e4c5