致命的异常:asynctask#1 doInBackground
Im新的android编程,我不能找出哪个触发错误。我有这样的错误:致命的异常:asynctask#1 doInBackground
10-29 02:34:17.989: E/AndroidRuntime(853): FATAL EXCEPTION: AsyncTask #1
10-29 02:34:17.989: E/AndroidRuntime(853): java.lang.RuntimeException: An error occured while executing doInBackground()
10-29 02:34:17.989: E/AndroidRuntime(853): at android.os.AsyncTask$3.done(AsyncTask.java:299)
10-29 02:34:17.989: E/AndroidRuntime(853): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
10-29 02:34:17.989: E/AndroidRuntime(853): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
10-29 02:34:17.989: E/AndroidRuntime(853): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
10-29 02:34:17.989: E/AndroidRuntime(853): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
10-29 02:34:17.989: E/AndroidRuntime(853): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
10-29 02:34:17.989: E/AndroidRuntime(853): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
10-29 02:34:17.989: E/AndroidRuntime(853): at java.lang.Thread.run(Thread.java:841)
10-29 02:34:17.989: E/AndroidRuntime(853): Caused by: java.lang.NullPointerException
10-29 02:34:17.989: E/AndroidRuntime(853): at com.agf.tripassigner.CreateTripActivity$CreateTrip.doInBackground(CreateTripActivity.java:104)
10-29 02:34:17.989: E/AndroidRuntime(853): at com.agf.tripassigner.CreateTripActivity$CreateTrip.doInBackground(CreateTripActivity.java:1)
10-29 02:34:17.989: E/AndroidRuntime(853): at android.os.AsyncTask$2.call(AsyncTask.java:287)
10-29 02:34:17.989: E/AndroidRuntime(853): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
10-29 02:34:17.989: E/AndroidRuntime(853): ... 4 more
10-29 02:34:18.848: W/EGL_emulation(853): eglSurfaceAttrib not implemented
10-29 02:34:19.909: E/WindowManager(853): Activity com.agf.tripassigner.CreateTripActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41844d20 V.E..... R......D 0,0-456,144} that was originally added here
10-29 02:34:19.909: E/WindowManager(853): android.view.WindowLeaked: Activity com.agf.tripassigner.CreateTripActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41844d20 V.E..... R......D 0,0-456,144} that was originally added here
10-29 02:34:19.909: E/WindowManager(853): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:345)
10-29 02:34:19.909: E/WindowManager(853): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:239)
10-29 02:34:19.909: E/WindowManager(853): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
10-29 02:34:19.909: E/WindowManager(853): at android.app.Dialog.show(Dialog.java:281)
10-29 02:34:19.909: E/WindowManager(853): at com.agf.tripassigner.CreateTripActivity$CreateTrip.onPreExecute(CreateTripActivity.java:80)
10-29 02:34:19.909: E/WindowManager(853): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
10-29 02:34:19.909: E/WindowManager(853): at android.os.AsyncTask.execute(AsyncTask.java:534)
10-29 02:34:19.909: E/WindowManager(853): at com.agf.tripassigner.CreateTripActivity$1.onClick(CreateTripActivity.java:58)
10-29 02:34:19.909: E/WindowManager(853): at android.view.View.performClick(View.java:4240)
10-29 02:34:19.909: E/WindowManager(853): at android.view.View$PerformClick.run(View.java:17721)
10-29 02:34:19.909: E/WindowManager(853): at android.os.Handler.handleCallback(Handler.java:730)
10-29 02:34:19.909: E/WindowManager(853): at android.os.Handler.dispatchMessage(Handler.java:92)
10-29 02:34:19.909: E/WindowManager(853): at android.os.Looper.loop(Looper.java:137)
10-29 02:34:19.909: E/WindowManager(853): at android.app.ActivityThread.main(ActivityThread.java:5103)
10-29 02:34:19.909: E/WindowManager(853): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 02:34:19.909: E/WindowManager(853): at java.lang.reflect.Method.invoke(Method.java:525)
10-29 02:34:19.909: E/WindowManager(853): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-29 02:34:19.909: E/WindowManager(853): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-29 02:34:19.909: E/WindowManager(853): at dalvik.system.NativeStart.main(Native Method)
,这些都是我在班上的AsyncTask代码:
class CreateTrip extends AsyncTask<String, String, String> {
/**
* Before Sttarting Background thread Show Progress Dialog
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(CreateTripActivity.this);
pDialog.setMessage("Creating Trip...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Creating Trip
*/
protected String doInBackground(String... args) {
String plate = inputPlate.getText().toString();
String customer = inputCustomer.getText().toString();
String area = inputArea.getText().toString();
String driver = inputDriver.getText().toString();
//Building parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("plate", plate));
params.add(new BasicNameValuePair("customer", customer));
params.add(new BasicNameValuePair("area", area));
params.add(new BasicNameValuePair("driver", driver));
//getting JSON Object
// Note that create trip url accepts post method
JSONObject json = jsonParser.makeHttpRequest(url_create_trip, "POST", params);
// check log cat for response
Log.d("Create Response", json.toString());
// check for success tag
try{
int success = json.getInt(TAG_SUCCESS);
if (success == 1){
//successfully created trip
Intent i = new Intent(getApplicationContext(), CreateTripActivity.class);
startActivity(i);
//closing this screen
finish();
}else {
// failed to create trip
}
} catch (JSONException e){
e.printStackTrace();
}
return null;
}
/**
* After Completing background task Dismiss the progress Dialog
*/
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.dismiss();
}
}
}
请帮助:((
// try this way
class CreateTrip extends AsyncTask {
ProgressDialog pDialog;
/** * Before Sttarting Background thread Show Progress Dialog */
@Override protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(CreateTripActivity.this);
pDialog.setMessage("Creating Trip..."); pDialog.setIndeterminate(false);
pDialog.setCancelable(true); pDialog.show();
}
/**
* Creating Trip
*/
protected String doInBackground(String... args) {
String plate = inputPlate.getText().toString();
String customer = inputCustomer.getText().toString();
String area = inputArea.getText().toString();
String driver = inputDriver.getText().toString();
//Building parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("plate", plate));
params.add(new BasicNameValuePair("customer", customer));
params.add(new BasicNameValuePair("area", area));
params.add(new BasicNameValuePair("driver", driver));
//getting JSON Object
// Note that create trip url accepts post method
JSONObject json = jsonParser.makeHttpRequest(url_create_trip, "POST", params);
// check log cat for response
Log.d("Create Response", json.toString());
// check for success tag
try{
int success = json.getInt(TAG_SUCCESS);
if (success == 1){
// success to create trip
return "1";
}else {
return "0";
// failed to create trip
}
} catch (JSONException e){
e.printStackTrace();
}
return null;
}
/**
* After Completing background task Dismiss the progress Dialog
*/
protected void onPostExecute(String result) {
// dismiss the dialog once done
pDialog.dismiss();
if(result!=null && result.equals("1")){
// success to create trip
Intent i = new Intent(getApplicationContext(), CreateTripActivity.class);
startActivity(i);
finish();
}else{
// failed to create trip
}
}
}
但在op的代码中会导致NPE的原因是什么? – Raghunandan
@Raghunanadan我想这是导致NPE Log.d(“Create Response”,json.toString());可能是json为null。 –
bcz你不能开始活动doInBackground()。,doInBackground()运行在ui线程之外,你可以在doInBackground()中启动任何ui任务。 –
不要执行相关操作的UI doInBackgroungd()
方法,只需将结果返回onPostExecute()
,然后写入开始活动的代码即可
/**
* After Completing background task Dismiss the progress Dialog
*/
protected void onPostExecute(String result) {
// dismiss the dialog once done
pDialog.dismiss();
if(result!=null && result.equals("1")){
// success to create trip
Intent i = new Intent(getApplicationContext(), CreateTripActivity.class);
startActivity(i);
finish();
}else{
// failed to create trip
}
}
什么是第104行'CreateTripActivity.java'? – Raghunandan
你在这里得到了NullPointerException:引起:java.lang.NullPointerException 10-29 02:34:17.989:E/AndroidRuntime(853):at com.agf.tripassigner.CreateTripActivity $ CreateTrip.doInBackground(CreateTripActivity.java:104 )',在第104行检查你的文件,也许有些变量在使用前没有被初始化。 – user2652394
因为你必须在对话框中使用.cancel(),而不是.dismiss() – Tejas