Странен проблем с времето за изчакване на връзката и Google Volley

Имам приложение за Android, което използва Google Volley, за да прави заявки към бекенд на уеб сървър (http://www.example.com/request.php). Кодът, който изисква уеб страницата, се извиква, когато потребителят премести карта.

Проблемът е, че понякога заявката е неуспешна. Когато не успее, отварям браузъра си Chrome (също и на телефона) и отивам до тази бекенд страница „request.php“. Заявката е неуспешна с грешка при изчакване на връзката. След това натискам опресняване в Chrome и той се зарежда правилно. Отварям отново приложението си и след това всичко отново работи добре, т.е.: заявката преминава.

Стъпки, които направих за отстраняване на грешки:

  1. Преминах от библиотеката com.loopj Async към Google Volley -> все още има грешки при изчакване

  2. Поискана е различна страница (напр.: stackoverflow.com вместо example.com/request.php), когато картата е преместена -> няма грешки

  3. Добавих този ред към htaccess на сървъра: RewriteRule (.*) - [E=Cache-Control:no-cache] защото имах проблеми с x-litespeed-cache, обслужващ кеширани страници преди -> все още има грешки при изчакване

  4. Изпробвано на множество устройства и емулатори на Android -> все още има произволни грешки при изчакване

  5. Подадох билет на моя уеб хост с въпрос дали са забелязали някакви грешки при изчакване от моята страница -> те казаха не

Ето моят код:

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 преди; срина приложението поради изключение с нулев указател.


person Michael    schedule 08.11.2014    source източник
comment
Бих опитал да посетя страницата ви от компютър и да проверя дали и там няма изчакване, може също така да опитате да преместите сървъра си на локален сървър, тъй като това ще гарантира, че знаете какво се случва с уеб сървъра.   -  person Gabriel Netto    schedule 08.11.2014
comment
Вашият сървър може да е малко претоварен. Добавете повторен опит! stackoverflow.com/a/24733287/794088 (не забравяйте да гласувате за, ако го намирате за полезно)   -  person petey    schedule 08.11.2014
comment
Страницата няма изчаквания на компютър, когато това се случва на мобилно устройство. Освен това не мисля, че повторният опит ще свърши работа. Изтича и в браузъра Chrome (докато не натисна опресняване след грешката)   -  person Michael    schedule 08.11.2014
comment
Добре, опитах се да изпълня повторните опити. Все още произволно ми дава грешки при изчакване.   -  person Michael    schedule 08.11.2014