setRequestProperty throwing java.lang.IllegalStateException: Cannot set request property after connection is made

前端 未结 9 1810
我在风中等你
我在风中等你 2020-12-17 17:35

I am getting java.lang.IllegalStateException:

java.lang.IllegalStateException: Cannot set request property after connection is made error w

相关标签:
9条回答
  • 2020-12-17 18:02

    I'm having the same issue. I was observing this issue on Nexus 5. Code of my app constantly fails with the same exception (or its twin brother "cannot set request method ..")

    What I've observed that it happens if i leave phone for a while. One it starts failing it fails all the time - but if i restart phone/emulator it's ok once again).

    My suspicion is its either some bug in connection pooling on framework side, or somewhere in code resources are leaked.

    0 讨论(0)
  • 2020-12-17 18:03

    I was getting the same exception on setRequestProperty("Range","byte=" + downloadedSize + "-") . After adding connection.setChunkedStreamingMode(0); the issue disappeared

    0 讨论(0)
  • 2020-12-17 18:04

    i found the problem it's about ordering the code, if you are trying to add header and post parameters both, it's important to be careful about this

    HttpURLConnection connection = (HttpURLConnection) urlConnection;
    
    ////        Add Request Headers
    for (NameValuePair nvp :
             request[0].getHeaderParams()) {
         connection.setRequestProperty(nvp.getName(),nvp.getValue());
         }
    // done
    
    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");
    ////         Add Post Parameters
    OutputStream outputStream = urlConnection.getOutputStream();
    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
    List<NameValuePair> params = new ArrayList<>(request[0].getPostParams());
    bufferedWriter.write(getQuery(params));
    
    // done
    connection.setConnectTimeout(3000);
    connection.setReadTimeout(3000);
    bufferedWriter.flush();
    bufferedWriter.close();
    outputStream.flush();
    outputStream.close();
    connection.connect();
    

    in here, i have added header parameters then set setDoInput and setDoOutput then setRequestMethod and finally you can add POST parameters. i don't know what is wrong with setRequestMethod but i think its preparing the connection by opening it or something and that's why it throws exception

    0 讨论(0)
  • 2020-12-17 18:07

    not invoke setRequestProperty after write byte to OutputStream.

    OutputStream os = connection.getOutputStream();
    os.write("k=v".getBytes());
    os.close();
    

    you should invoke setRequestProperty above the code

    0 讨论(0)
  • 2020-12-17 18:12

    I only have this issue while in debugging mode, Run without debugging (You can print logs) everything should work fine

    0 讨论(0)
  • 2020-12-17 18:14

    This usually happens if you have in the debug watchers calls, such as conn.getResponseCode() or anything that queries the request result before the request was actually issued or completed. This causes, that during debug, a request is performed by the watcher, before having properly set you request, and then it becomes invalid.

    0 讨论(0)
提交回复
热议问题