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 块中关闭连接)。