Witam. Podczas pisania fragmentu kogu mającego wysyłać zapytania GET i zapisania odpowiedzi Json jako listę obiektów natknąłem się na dziwny i nie zrozumiały dla mnie problem, a właściwie dwa.
- IDE wymusza na mnie deklaracji <List> lista z użyciem final,
- W bloku try{} zapisuje do<List> lista kolejne obiekty stworzone na podstawie odpowiedzi JSON i w debugerze widzę że wszystko jest ok, lista po zakończeniu pętli for ma 5 elementów, tak jako powinna mieć, ale na końcu metody , kiedy listę chcę zwrócić okazuje się że lista ma 0 elementów. Pewnie problem spowodowany jest tym że działania te wykonuje w metodzie onResponse() ale wydawało mi się zadeklarowanie listy poza nią wystarczy. Jak można naprawić ten problem?
List<Expens> get_all_expensions(){
final List<Expens> lista = new ArrayList<Expens>();
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://przyklady.javastart.pl/ap/expenses/";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Gson gson = new Gson();
try
{
JSONArray JA = new JSONArray(response);
int b = JA.length();
for(int i=0; i<JA.length();i++){
lista.add(gson.fromJson(JA.getString(i),Expens.class));
}
}
catch (JSONException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
return lista;
}