Приложение Android на планшете не работает с ICS из-за проблемы со входом в систему.Когда я посмотрел свой код и запустил его в режиме отладки на планшете ICS, я увидел проблему, но не понимаю ее.Код работает правильно на всех моделях Honeycomb, которые я тестировал, и на самом деле у меня есть два планшета, подключенных к моему компьютеру (один Samsung Galaxy Tab с версией 3.2 и Motorola Xoom wifi с версией 4.0.3), и код не работает на ICS и работаетна HC.
Ошибка - исключение времени ожидания гнезда.Время ожидания составляло 2000 мс, но я увеличил его до 100000 мс для тестирования, и оно не оказало никакого влияния.
Используя браузер на планшете ICS, я могу перейти по URL-адресу, и он отвечает, поэтому он не отображаетсябыть связанным с сетью.
Я работаю в фоновом потоке, используя AsyncTask.
Slurp просто берет все входные данные из InputStream, а использование StringBuilder создает строковое представление.На самом деле это бесполезно в этом запросе, но я добавил его, чтобы увидеть, что сервер отвечает.
Я размещаю на странице так же, как пользователь аутентифицируется с помощью формы, поэтому я использую x-www-form-urlencoded.
Опять же, этот код прекрасно работает на Honeycomb, но не работает на ICS.
Код устанавливает соединение, но не работает, когда запрашивает ответ от сервера, почти каксервер все еще чего-то ждет ... в любом случае вот код:
static public String authenticate(String service_url, String username, String password) throws IOException {
if (username == null || password == null)
throw new IOException();
String charset = "UTF-8";
String query = String.format("Email=%s&Password=%s",URLEncoder.encode(username, charset),URLEncoder.encode(password, charset));
byte [] data = query.getBytes(charset);
URL url = new URL(service_url);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Accept-Charset", charset);
connection.setRequestProperty("Content-Length", Integer.toString(data.length));
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setReadTimeout(5000); // 2 second timeout.
try {
connection.connect();
DataOutputStream pw = new DataOutputStream (connection.getOutputStream());
pw.writeBytes(query);
pw.flush();
pw.close();
int code = connection.getResponseCode(); //SOCKET TIMEOUT HERE
if (code == 200 || code == 302)
{
InputStream is = connection.getInputStream();
String value = slurp(is);
List<String> cookies = connection.getHeaderFields().get("Set-Cookie");
if (cookies == null)
throw new IOException();
for (String cookie : cookies) {
if (cookie.startsWith("cpms")) {
cookieTime = new DateTime(); //crazy but the expires time in the cookie is not actually accurate.
return cookie; // this is the only correct path out.
}
}
}
else
Logger.e(StaticUtils.class, "Invalid response code while logging in: " + code);
}
catch (IOException ioe)
{
Logger.e(StaticUtils.class, ioe);
throw ioe; // log it and then throw it back.
} finally {
connection.disconnect();
}
return null;
}