[英]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.