Android 放置方法错误
Android Put Method error
我试过使用 PUT
方法向服务器发送消息,但它不起作用。你能解决这条消息吗:java.net.ProtocolException: java cannot write request body after response has been read o
class DoUpdateSlides extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
String JSONData = params[0];
try {
URL url = new URL(API);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("PUT");
httpURLConnection.setDoOutput(true);
httpURLConnection.connect();
int statusCode = httpURLConnection.getResponseCode();
System.out.println(statusCode);
OutputStream dos = httpURLConnection.getOutputStream();
dos.write(JSONData.getBytes());
InputStream is = httpURLConnection.getInputStream();
String result = "";
int byteCharacter;
while ((byteCharacter = is.read())!=-1){
result += (char)byteCharacter;
}
Log.d("json api","DoUpdateSlides.doInBackground Json return: "+ result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
和堆栈跟踪:
System.err: java.net.ProtocolException: cannot write request body after
response has been read
05-04 17:20:26.753 5631-5645/com.aden.vidit.learningcrud
W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:203)
at com.aden.vidit.learningcrud.EditActivity$DoUpdateSlides.doInBackground(EditActivity.java:137)
at com.aden.vidit.learningcrud.EditActivity$DoUpdateSlides.doInBackground(EditActivity.java:121)
at android.os.AsyncTask.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
HTTP 协议基于请求-响应模式。您先发送请求,然后服务器响应。一旦服务器响应,您将无法再发送任何内容,这没有意义。
当您调用 getResponseCode()
时,您有效地告诉服务器您的请求已完成并且它可以处理它。如果你想发送更多的数据,你必须开始一个新的请求。
调用前移动此代码 getResponseCode()
OutputStream dos = httpURLConnection.getOutputStream();
dos.write(JSONData.getBytes());
完成后应该关闭连接(使用 try 和 catch 并在 finally 块中关闭连接)。
我试过使用 PUT
方法向服务器发送消息,但它不起作用。你能解决这条消息吗:java.net.ProtocolException: java cannot write request body after response has been read o
class DoUpdateSlides extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
String JSONData = params[0];
try {
URL url = new URL(API);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("PUT");
httpURLConnection.setDoOutput(true);
httpURLConnection.connect();
int statusCode = httpURLConnection.getResponseCode();
System.out.println(statusCode);
OutputStream dos = httpURLConnection.getOutputStream();
dos.write(JSONData.getBytes());
InputStream is = httpURLConnection.getInputStream();
String result = "";
int byteCharacter;
while ((byteCharacter = is.read())!=-1){
result += (char)byteCharacter;
}
Log.d("json api","DoUpdateSlides.doInBackground Json return: "+ result);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
和堆栈跟踪:
System.err: java.net.ProtocolException: cannot write request body after
response has been read
05-04 17:20:26.753 5631-5645/com.aden.vidit.learningcrud
W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:203)
at com.aden.vidit.learningcrud.EditActivity$DoUpdateSlides.doInBackground(EditActivity.java:137)
at com.aden.vidit.learningcrud.EditActivity$DoUpdateSlides.doInBackground(EditActivity.java:121)
at android.os.AsyncTask.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
HTTP 协议基于请求-响应模式。您先发送请求,然后服务器响应。一旦服务器响应,您将无法再发送任何内容,这没有意义。
当您调用 getResponseCode()
时,您有效地告诉服务器您的请求已完成并且它可以处理它。如果你想发送更多的数据,你必须开始一个新的请求。
调用前移动此代码 getResponseCode()
OutputStream dos = httpURLConnection.getOutputStream();
dos.write(JSONData.getBytes());
完成后应该关闭连接(使用 try 和 catch 并在 finally 块中关闭连接)。