为什么从另一个方法android调用时我得到空的arrayList [英] Why i'm getting empty arrayList when called from another method android

查看:76
本文介绍了为什么从另一个方法android调用时我得到空的arrayList的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to fill an ArrayList with this method GetList() and I can see that I got 2 records added. but when I tried to get those records with this method LoadQst() I got 0 records in that ArrayList this is my code,

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个结果

when I check if I got something in my Questions I got 2 results

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

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

but when I call this Questions ArrayList in this method LoadQst() I get 0 results. should I switch from ArrayList to another method? you're to suggest any type of solutions

请,你可以看看吗?

推荐答案

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

This is because of JsonObjectRequest onResponse method in Asynchronous. The LoadQst method executes before the onResponse method.

onResponse内部调用您的LoadQst方法,而不是在onCreate中调用.

Call your LoadQst method inside onResponse instead of calling in 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();
            }
        }

这篇关于为什么从另一个方法android调用时我得到空的arrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆