私は、POSTを使ってAPIに渡そうとしているオブジェクトの配列を持っています。それが必要として、第一の目的は、通過します、そして私が得る:URLConnection - 応答が読み込まれた後にリクエスト本体を書き込めません。
java.net.ProtocolException: cannot write request body after response has been read
私はそれは私が物事をやっているだけのためだかなり確信しているが、私はまだAndroidの勉強としようとしています今は1時間とちょっと分かります。
私は皆さんに助けを求めるでしょう。私は後で使用されるIDフィールドのためにそれをpsrseできるように、POSTに対する各応答を受け取る必要があります。あなたは私のFORループの中でそれを解析して、私が後で参照するリストにIDを格納しているのを見るでしょう。以下のPOSTのための
コード:
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: 以下について重複コメント私が受けてるエラーが若干異なっています。私はそれの原則を理解していますが、私の.getRespondeCodeは私のforループの外にあり、それはサイクリングする必要があります。しかし、そうではありません。
私はそれが私が解析する必要がIDが含まれているとして計上オブジェクトごとにサーバの応答文字列を取得する必要がありobjects.size> = 2
場合、このエラーが発生します。
可能な重複は、[入力を読んだ後に出力を書き込むことができません](http://stackoverflow.com/questions/11413028/cannot-write-output-after-reading-input) – e4c5