Мои вопросы по HttpURLConnections на андроид.(cast-URLConnection, url.openConnection, getOutPutStream () ..) - PullRequest
1 голос
/ 17 октября 2011

У меня проблема с созданием httpurlconnection (или httpsurlconnection). На самом деле речь идет о настройке заголовков соединения после приведения url.openconnection. До этого исполняемый код не работал. Я не мог понять. (Исключение: уже подключено ... или как ...)

Иногда он запускается до httpConn.getOutPutStream (); В это время выдает ошибку "java.net.ProtocolException: OutputStream недоступен, поскольку заголовки запроса уже отправлены!"

Где моя вина?

До того, как я использовал код: Весь код здесь (у меня есть еще один вопрос по поводу Этот код тоже)

URL url = new URL(getUrl());
URLConnection conn = url.openConnection();
HttpURLConnection httpConn=(HttpURLConnection)conn; /*or HttpsURLConnection*/
httpConn.set...
...
httpConn.connect();
...

Я пытаюсь установить некоторые настройки после приведения, но результат тот же. conn.set .. работает, но после кастинга ничего не могу установить ...

Измененный код:

        URL url = new URL(getUrl());
        conn = url.openConnection();
        conn.setAllowUserInteraction(false);
        conn.setConnectTimeout(10000);
        conn.setRequestProperty("Accept-Charset", "utf-8");
        conn.setRequestProperty("Content-Type",
                "text/xml; charset=utf-8");
        conn.setRequestProperty("SOAPAction",
                "http://tempuri.org/IAuthenticationServiceNew/Authenticate");
        conn.setRequestProperty("Software-Version", AppData.VERSION);
        conn.setDoOutput(true);
        httpConn = (HttpsURLConnection) conn;
        httpConn.setChunkedStreamingMode(getParams().getBytes("UTF8").length);
        httpConn.setInstanceFollowRedirects(true);

        httpConn.connect();
        os = httpConn.getOutputStream();
        os.write(getParams().getBytes("UTF8"));

1 Ответ

1 голос
/ 17 октября 2011

Это правильно!
«httpConn.setInstanceFollowRedirects (true)» подключается и отправляет заголовки на сервер. Я закрываю этот код.

        URL url = new URL(getUrl());
        httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setDoInput(true);
        httpConn.setDoOutput(true);
        httpConn.setAllowUserInteraction(false);
        httpConn.setUseCaches(false);
        httpConn.setConnectTimeout(10000);
        httpConn.setRequestProperty("Accept-Charset", "utf-8");
        httpConn.setRequestProperty("Content-Type",
                "text/xml; charset=utf-8");
        httpConn.setRequestProperty("SOAPAction",
                "http://tempuri.org/IAuthenticationServiceNew/"
                        + conTypeString);
        httpConn.setRequestProperty("Software-Version", AppData.VERSION);
        httpConn.setRequestMethod("POST");
        httpConn.setChunkedStreamingMode(0);
        os = httpConn.getOutputStream();
        os.write(getParams().getBytes("UTF8"));
...