我正在尝试从 https://github.com/thiagobodruk/bible/blob/master/json/en_kjv.json 获取 JSONStrings并将它们显示给 ListView,但问题是,CPU 无法处理该进程并导致应用程序崩溃。
en_kjv.json
位于 AWS S3 中,我正在使用 Volley 获取内容。
Volley 代码:
StringRequest requestKJV = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
processDone(response, "Genesis");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, "Something wen't wrong whilst loading KJV. Please make sure your WiFi/Cellular Data was connected.", Toast.LENGTH_LONG).show();
ArrayList<String> listER = new ArrayList<>();
ArrayAdapter<String> arrayAdapterER = new ArrayAdapter<>(MainActivity.this, R.layout.listview, R.id.items);
}
});
processDone();
代码:
public void processDone(String mainStringJson, String name) {
ArrayList<String> list= new ArrayList<>();
ArrayAdapter<String> arrayAdapterLP = new ArrayAdapter<>(this, R.layout.listview, R.id.line, list);
try {
JSONArray jsonArray = new JSONArray("[" + mainStringJson + "]");
for(int i=0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if(jsonObject.getString("name").equals(name)) {
JSONArray chapterArrays = jsonObject.getJSONArray("chapters");
for(int iA=0; iA < chapterArrays.length(); iA++) {
JSONArray jsonArray1 = chapterArrays.getJSONArray(iA);
for(int iB=0; iB < jsonArray1.length(); iB++) {
arrayAdapterLP.add(jsonArray1.getString(iB));
}
}
}
}
} catch (JSONException jsonE){
Toast.makeText(this, "Something wen't wrong. " + jsonE , Toast.LENGTH_LONG).show();
}
lv.setAdapter(arrayAdapterLP);
}
在 Logcat 中,我得到任务被取消
,有时等待发送非键事件,因为触摸的窗口尚未完成处理 500.0 毫秒前传递给它的某些输入事件
.
最佳答案
您是否尝试从 https://raw.githubusercontent.com/thiagobodruk/bible/master/json/en_kjv.json 获取 JSONStrings
并且您应该使用Retrofit2、OkHttp而不是StringRequest
关于java - For 循环 JSONArray 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58484460/