Как использовать значение переменной, которая была определена внутри метода onResponse в Android Studio - PullRequest
0 голосов
/ 24 февраля 2020

Все, что мне нужно, это сохранить пару списков, которые находятся в базе данных, чтобы использовать их позже в коде, но списки всегда выглядят пустыми, когда вызываются вне метода onResponse. Я новичок как в Android Studio, так и в базах данных. Я использовал библиотеку Volley, вот «выдержка» из части кода, которая вызывает у меня проблемы с некоторыми Принтами, где Массив пуст или нет:

    public class Fragmento extends Fragment {

    ArrayList<String> codes = new ArrayList<String>();
    ArrayList<String> names = new ArrayList<String>();
    ArrayList<ArrayList<String>> thing= new ArrayList<ArrayList<String>>();;

    RequestQueue requestQueue;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        load();
        System.out.println(thing); //ARRAY IS EMPTY

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_fragmento, container, false);
    }

    private void load(){
        JsonArrayRequest jsonArrayRequest= new JsonArrayRequest("the url here",new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        JSONObject jsonObject = null;
                        for (int i = 0; i < response.length(); i++) {
                            try {
                                jsonObject = response.getJSONObject(i);
                                codes.add(jsonObject.getString("codigo"));
                                names.add(jsonObject.getString("nombre"));


                            } catch (JSONException e) {
                                Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
                            }
                        }
                        thing.add(codes);
                        thing.add(names);

                        System.out.println(thing);//ARRAY IS FULL
                    }

                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getContext(),error.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
        System.out.println(thing);//ARRAY IS EMPTY

        requestQueue=Volley.newRequestQueue(getActivity());
        requestQueue.add(jsonArrayRequest);
    }
}

1 Ответ

1 голос
/ 24 февраля 2020

Поскольку в функции load() вы вызываете API, используя JsonArrayRequest в фоновом режиме, поэтому System.out.println(thing) в onCreate() вызывается до получения ответа от Сервера. Поэтому массив thing пуст.

...