У меня есть приложение для Android, которое использует Google Volley для выполнения запросов к серверной части веб-сервера (http://www.example.com/request.php). Код, который запрашивает веб-страницу, вызывается, когда пользователь перемещает карту.
Проблема в том, что иногда запрос не выполняется. Когда это не удается, я открываю свой браузер Chrome (также на телефоне) и перехожу на эту внутреннюю страницу «request.php». Запрос завершается с ошибкой тайм-аута соединения. Затем я нажимаю «Обновить» в Chrome, и он загружается правильно. Я снова открываю свое приложение, и тогда все снова работает нормально, то есть: запрос проходит.
Действия, которые я предпринял для отладки:
Я переключился с асинхронной библиотеки com.loopj на Google Volley -> все еще есть ошибки тайм-аута
Запрошена другая страница (например:
stackoverflow.com
вместоexample.com/request.php
) при перемещении карты -> ошибок нетДобавил эту строку в htaccess на сервере:
RewriteRule (.*) - [E=Cache-Control:no-cache]
, потому что у меня были проблемы с x-litespeed-cache, обслуживающим кешированные страницы до -> все еще есть ошибки тайм-аутаПробовал на нескольких устройствах и эмуляторах Android -> все еще случайным образом возникают ошибки тайм-аута
Подал заявку на мой веб-хост с вопросом, заметили ли они какие-либо ошибки тайм-аута на моей странице -> они сказали нет
Вот мой код:
public void updateMarkers() {
params = new HashMap<String, String>();
params.put("mykey", "myvalue");
StringRequest fpsr = new StringRequest(Method.POST, "http://www.example.com/request.php", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//do stuff with the response
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//do stuff with error
}
}) {
@Override
protected Map<String, String> getParams() {
return params;
}
};
ApplicationController.getInstance().addToRequestQueue(fpsr, "updateMarkers");
}
И ApplicationController.java
такой же, как здесь: http://www.androidhive.info/2014/05/android-working-with-volley-library-1/
Я очень сомневаюсь, что в коде есть проблемы, поскольку запросы к страницам, отличным от моих, никогда не вызывают проблем.
Странно то, что мой веб-хост сказал, что не заметил никаких ошибок тайм-аута. Но даже при посещении страницы в Chrome для Android были ошибки тайм-аута, которые исчезали только при нажатии кнопки «Обновить».
Кто-нибудь может пролить свет на это? Большое спасибо!
Кроме того, у меня нет кода ответа HTTP от VolleyError. Причина в том, что он дает сбой случайным образом, и я не всегда подключаю телефон к компьютеру, чтобы увидеть logcat. Кроме того, я пытался зарегистрировать error.networkResponse.statusCode
раньше; это привело к сбою приложения из-за исключения нулевого указателя.