В чем разница между httpconnection на J2ME и HttpURLConnection на Android (ошибка http 401)

#android #java-me #httpurlconnection #http-error

#Android #java-me #httpurlconnection #http-ошибка

Вопрос:

Я подключаюсь к двум серверам (PROD — https, тестовый сервер — http) в своих приложениях.

на J2ME: я могу подключиться к этим двум серверам без проблем. на Android я не могу подключиться к тестовому серверу. Когда соединение http, если я не использую setChunkedStreamingMode , я не могу получить responseCode(StringIndexOutOfBoundsException); , если использую setChunkedStreamingMode , код ответа 401 . Что мне делать, в чем моя ошибка??

Вот мой код Android, также, если вы хотите увидеть код J2me, я тоже могу его добавить.

 URL url = new URL(getUrl());
            URLConnection conn = url.openConnection();
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setConnectTimeout(10000);
            httpConn.setRequestProperty("User-Agent", util.getDeviceFullModel()
                      " "   util.getSoftwareVersion());
            httpConn.setRequestProperty("Accept-Charset", "utf-8");

            httpConn.setRequestProperty("Content-Type",
                    "text/xml; charset=utf-8");
            httpConn.setRequestProperty("SOAPAction",
                    "http://tempuri.org/IAuthenticationServiceForGroup/" conTypeString);
            httpConn.setRequestProperty("Software-Version", AppData.VERSION);
            httpConn.setChunkedStreamingMode(getParams().getBytes("UTF8").length);
            httpConn.setRequestMethod("POST");
            httpConn.setDoOutput(true);
            httpConn.setDoInput(true);
            httpConn.connect();

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

            try {
                os.close();
            } catch (Exception e) {
                onError(e);
            }
            response=httpConn.getResponseCode();
  

Код J2ME:

 HttpConnection c = (HttpConnection)XConnection.openConnection(XConnection.SERVER   "AuthenticationServiceForGroup.svc");

            c.setRequestProperty("User-Agent", XUtil.getDeviceFullModel()   " "   XUtil.getSoftwareVersion());
            c.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
            c.setRequestProperty("SOAPAction", "http://tempuri.org/IAuthenticationServiceForGroup/" conType);
            c.setRequestProperty("Software-Version", XApp.VERSION);
            c.setRequestMethod(HttpConnection.POST);

            OutputStream os = null;

            os = c.openOutputStream();
            os.write(sParams.getBytes());

            try {os.close();} catch (Exception e) {}

            if (c.getResponseCode() == HttpConnection.HTTP_OK)
  

Комментарии:

1. не могли бы вы также добавить свой код j2me?

Ответ №1:

Если вы используете устройства до версии 2.3, HttpURLConnection имеет известные проблемы

http://android-developers.blogspot.com/2011/09/androids-http-clients.html

Ответ №2:

Я решил эту проблему. Я использую ip-адрес вместо ссылки. Сервер был сервером Sharepoint, поэтому он пытается подключиться непосредственно к серверу sharepoint, поэтому сервер хочет аутентификации 🙂 Не используйте напрямую ip 🙂