#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 🙂