Имам приложение за Android, което използва Google Volley, за да прави заявки към бекенд на уеб сървър (http://www.example.com/request.php). Кодът, който изисква уеб страницата, се извиква, когато потребителят премести карта.
Проблемът е, че понякога заявката е неуспешна. Когато не успее, отварям браузъра си Chrome (също и на телефона) и отивам до тази бекенд страница „request.php“. Заявката е неуспешна с грешка при изчакване на връзката. След това натискам опресняване в Chrome и той се зарежда правилно. Отварям отново приложението си и след това всичко отново работи добре, т.е.: заявката преминава.
Стъпки, които направих за отстраняване на грешки:
Преминах от библиотеката com.loopj Async към 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
преди; срина приложението поради изключение с нулев указател.