为什么从另一个方法android调用时我得到空的arrayList

时间:2019-07-07 17:43:37

标签: java android arraylist

我正在尝试使用此方法GetList()填充ArrayList 我看到我添加了2条记录。 但是当我尝试使用此方法LoadQst()获取这些记录时,在该ArrayList中获得了0条记录 这是我的代码,

public class GameActivity extends AppCompatActivity {

    TextView texto1,texto2;
    String Option1,Option2;
    int CurrentQst,CurrentQstId,int1,int2;
    private RequestQueue mQueue;
    Question qst = new Question();
    public final List<Question> Questions = new ArrayList<Question>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        texto1  = (TextView) findViewById(R.id.red);
        texto2 = (TextView) findViewById(R.id.blue);
        CurrentQst=0;
        mQueue = Volley.newRequestQueue(GameActivity.this);
        texto1.setText("");
        GetList();
        LoadQst();
        texto1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                GetList();


            }
        });
    }

    private void GetList() {

        String url = "*********/api/get_all_products.php";

        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("products");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject employee = jsonArray.getJSONObject(i);
                                qst = new Question();
                                String option1 = employee.getString("option1");
                                qst.id=employee.getInt("id");
                                qst.option1=employee.getString("option1");
                                qst.option2=employee.getString("option2");
                                qst.vote1=employee.getInt("vote1");
                                qst.vote2=employee.getInt("vote2");
                                boolean added =  Questions.add(qst);
                                if (added)
                                {
                                    texto1.append("added\n");
                                } else
                                {
                                    texto1.append("not added\n");
                                }

                            }
                            for (int i = 0; i < Questions.size(); i++) {
                                texto1.append("option " + Questions.get(i).option1 + "\n");
                            }
                            texto1.append(" size "+Questions.size()); //here i get size of 2
                            //Collections.shuffle(Questions);
                        } catch (JSONException e) {
                            e.printStackTrace();
                            texto1.setText(e.getMessage());
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mQueue.add(request);
    }
    private void LoadQst()
    {
        try {
            Question CurrentQuestion ;
            texto2.setText(String.valueOf(Questions.size()));//here i got an error size 0
           // CurrentQuestion = (Question)Questions.get(CurrentQst);
            //texto1.setText(CurrentQuestion.option1);
            //texto2.setText(CurrentQuestion.option1);
           // int1=CurrentQuestion.vote1;
            //int2=CurrentQuestion.vote2;
            //CurrentQstId=CurrentQuestion.id;
        }catch (Exception e)
        {
texto2.append(e.getMessage());
        }

    }

}

当我检查我的问题中是否有东西时 我有2个结果

for (int i = 0; i < Questions.size(); i++) {
                                texto1.append("option " + Questions.get(i).option1 + "\n");
                        }

但是当我在此方法LoadQst()中调用此Questions ArrayList时,我得到0个结果。 我应该从ArrayList切换到另一个方法吗? 您要提出任何类型的解决方案

请,你可以看看吗?

1 个答案:

答案 0 :(得分:1)

这是因为异步中的JsonObjectRequest onResponse方法。 LoadQst方法在onResponse方法之前执行。

LoadQst中调用onResponse方法,而不是在onCreate中调用。

 new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            JSONArray jsonArray = response.getJSONArray("products");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject employee = jsonArray.getJSONObject(i);
                                qst = new Question();
                                String option1 = employee.getString("option1");
                                qst.id=employee.getInt("id");
                                qst.option1=employee.getString("option1");
                                qst.option2=employee.getString("option2");
                                qst.vote1=employee.getInt("vote1");
                                qst.vote2=employee.getInt("vote2");
                                boolean added =  Questions.add(qst);
                                if (added)
                                {
                                    texto1.append("added\n");
                                } else
                                {
                                    texto1.append("not added\n");
                                }

                            }
                            for (int i = 0; i < Questions.size(); i++) {
                                texto1.append("option " + Questions.get(i).option1 + "\n");
                            }
                            texto1.append(" size "+Questions.size()); //here i get size of 2
                            //Collections.shuffle(Questions);

                            LoadQst(); // Call here.
                        } catch (JSONException e) {
                            e.printStackTrace();
                            texto1.setText(e.getMessage());
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        }