bugfix> java > 投稿

このメソッド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()でこの質問ArrayListを呼び出すと、結果が0になります。 ArrayListから別のメソッドに切り替える必要がありますか? あらゆるタイプの解決策を提案します

ご覧ください。

回答 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();
                }
            }
    
    

あなたの答え