繁体   English   中英

为什么标签不显示我的数组元素?

[英]why does not the Tag show my the array element?

它在 logcat 中给了我一堆错误。 但是如果我删除Log.d("intheclass", questionsArray.get(0)); 它显示没有错误并且应用程序启动。 使用该代码,应用程序无法启动。 我试图记录响应本身,它有效。 完全不知道为什么这个数组不起作用。

package com.example.trivia.data;

import android.util.Log;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.example.trivia.controller.AppControl;

import org.json.JSONArray;
import org.json.JSONException;

import java.util.ArrayList;
import java.util.List;

public class QuestionBank {
    private String que1;
    String url = "https://raw.githubusercontent.com/curiousily/simple-quiz/master/script/statements.json";
    ArrayList<String> questionsArray= new ArrayList<String>();



    public List<String> getQuestions(){
        JsonArrayRequest bank = new JsonArrayRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        for(int i=0; i<response.length(); i++){
                            try {
                                que1 = (String) response.getJSONArray(i).get(0);
                                Log.d("queva", String.valueOf(i));
                                questionsArray.add(que1);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                        //if(callback != null) callback.processFinish(questionsArray);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });
        AppControl.getInstance().addToRequestQueue(bank);
        Log.d("intheclass", questionsArray.get(0));
        return questionsArray;
    }
}

当您尝试访问时,它是空的。 当您调用getQuestions()时,它会转到另一个工作线程来添加questionsArray中的值,但您的日志在主线程上并且是按顺序调用的,因此它不会工作并且会崩溃。

可能的解决方案。

public void getQuestions(){
    JsonArrayRequest bank = new JsonArrayRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    for(int i=0; i<response.length(); i++){
                        try {
                            que1 = (String) response.getJSONArray(i).get(0);
                            Log.d("queva", String.valueOf(i));
                            questionsArray.add(que1);
                            doSomething(); //here calling
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                    //if(callback != null) callback.processFinish(questionsArray);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });
 }
}

并在成功 api 调用后从 onRepsonse() 调用它。

public void doSomething(){
    AppControl.getInstance().addToRequestQueue(bank);
    Log.d("intheclass", questionsArray.get(0));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM