[英]FATAL EXCEPTION: AsyncTask #1 : java.lang.RuntimeException: An error occured while executing doInBackground()
I had error when build my code on android device. 在Android设备上构建代码时出现错误。 its the error report 错误报告
FATAL EXCEPTION: AsyncTask #1 Process: com.example.guntu, PID: 1248 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:304) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONArray org.json.JSONObject.getJSONArray(java.lang.String)' on a null object reference at com.example.guntu.List$DownloadJSON.doInBackground(List.java:74) at com.example.guntu.List$DownloadJSON.doInBackground(List.java:49) at android.os.Asyn 致命异常:AsyncTask#1进程:com.example.guntu,PID:1248 java.lang.RuntimeException:在Java上的android.os.AsyncTask $ 3.done(AsyncTask.java:304)执行doInBackground()时发生错误。 android上的util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)在java.util.concurrent.FutureTask.setException(FutureTask.java:222)在java.util.concurrent.FutureTask.run(FutureTask.java:242)在Android .os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java: 587)at java.lang.Thread.run(Thread.java:818)原因:java.lang.NullPointerException:尝试调用虚拟方法'org.json.JSONArray org.json.JSONObject.getJSONArray(java.lang.String )''放在com.example.guntu.List $ DownloadJSON.doInBackground(List.java:49)上com.example.guntu.List $ DownloadJSON.doInBackground(List.java:74)上的空对象引用上。阿辛 cTask$2.call(AsyncTask.java:292) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) 09-06 07:37:48.656 1248-1248/com.example.guntu E/WindowManager: android.view.WindowLeaked: Activity com.example.guntu.List has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{35557537 VE.... R......D 0,0-684,322} that was originally added here at android.view.ViewRootImpl.(ViewRootImpl.java:364) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) at android.app.Dialog.show(Dialog.java:298) at com.example.guntu.List$DownloadJSON.onPreExecute(List.java:62) at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591 cTask $ 2.call(AsyncTask.java:292)at java.util.concurrent.FutureTask.run(FutureTask.java:237)at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)at java.util .concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587)at java.lang.Thread.run(Thread.java:818)09-06 07:37:48.656 1248-1248 / com.example.guntu E / WindowManager:android.view.WindowLeaked:活动com.example.guntu.List泄漏了窗口com.android.internal.policy.impl.PhoneWindow $ DecorView {35557537 VE .... R ...... D 0,0-684,322},最初是在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java :271),位于android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85),位于android.app.Dialog.show(Dialog.java:298),位于com.example.guntu.List $ DownloadJSON.onPreExecute(List.java: 62)在android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591 ) at android.os.AsyncTask.execute(AsyncTask.java:539) at com.example.guntu.List.onCreate(List.java:44) at android.app.Activity.performCreate(Activity.java:6033) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5268) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) )的android.os.AsyncTask.execute(AsyncTask.java:539)的com.example.guntu.List.onCreate(List.java:44)的android.app.Activity.performCreate(Activity.java:6033)的android .app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397)在android.app.ActivityThread在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1310)在android.os.Handler.dispatchMessage(Handler.java:102)处访问$ 800(ActivityThread.java:151)在android.os.Looper.loop( Looper.java:135),位于android.app.ActivityThread.main(ActivityThread.java:5268),位于java.lang.reflect.Method.invoke(本机方法),位于java.lang.reflect.Method.invoke(Method.java: 372),位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:902),位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
here is my code 这是我的代码
private class DownloadJSON extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progressdialog
mProgressDialog = new ProgressDialog(List.this);
// Set progressdialog title
mProgressDialog.setTitle("Android JSON Parse Tutorial");
// Set progressdialog message
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
// Show progressdialog
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// Create an array
arraylist = new ArrayList<HashMap<String, String>>();
// Retrieve JSON Objects from the given URL address
jsonobject = JSONFunction
.getJSONfromURL("http://localhost/atm_db/json/json.php");
try {
// Locate the array name in JSON
jsonarray = jsonobject.getJSONArray("");
for (int i = 0; i < jsonarray.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
jsonobject = jsonarray.getJSONObject(i);
// Retrive JSON Objects
map.put("nama_atm", jsonobject.getString("nama_atm"));
map.put("alamat", jsonobject.getString("alamat"));
map.put("latitude", jsonobject.getString("latitude"));
map.put("longtitude", jsonobject.getString("longtitude"));
// Set the JSON Objects into the array
arraylist.add(map);
}
} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
It looks like jsonobject.getJSONArray("");
看起来像jsonobject.getJSONArray("");
is throwing the error due to the fact that jsonobject is null. 由于jsonobject为null的事实而抛出错误。
You will want to double check that you are getting data back and if so the format of that JSON data. 您将需要仔细检查是否正在获取数据,如果是,则返回该JSON数据的格式。
Replace DownloadJSON with the following code : 将DownloadJSON替换为以下代码:
public class DownloadJSON extends AsyncTask<String ,Integer , JSONObject> {
DownloadJSON(){
// Create an array
arraylist = new ArrayList<HashMap<String, String>>();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progressdialog
mProgressDialog = new ProgressDialog(List.this);
// Set progressdialog title
mProgressDialog.setTitle("Android JSON Parse Tutorial");
// Set progressdialog message
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
// Show progressdialog
mProgressDialog.show();
}
@Override
protected JSONObject doInBackground(String... params) {
// Retrieve JSON Objects from the given URL address
jsonobject = JSONFunction.getJSONfromURL("http://localhost/atm_db/json/json.php");
return jsonobject;
}
@Override
protected void onPostExecute(JSONObject s) {
super.onPostExecute(s);
try {
// Locate the array name in JSON
jsonarray = jsonobject.getJSONArray("PUT KEY OF JSON HERE");
for (int i = 0; i < jsonarray.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
jsonobject = jsonarray.getJSONObject(i);
// Retrive JSON Objects
map.put("nama_atm", jsonobject.getString("nama_atm"));
map.put("alamat", jsonobject.getString("alamat"));
map.put("latitude", jsonobject.getString("latitude"));
map.put("longtitude", jsonobject.getString("longtitude"));
// Set the JSON Objects into the array
arraylist.add(map);
}
} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
}
Note : 注意 :
1 . 1。 Before returning jsonobject from doInBackground() be sure that you are receiving valid jsonobject from the URL you mentioned . 从doInBackground()返回jsonobject之前,请确保您从提到的URL接收到有效的jsonobject。
2 . 2。 While getting jsonArray from jsonobject use key of the array . 从jsonobject获取jsonArray时,请使用array的键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.