我通过接口和回调函数来实现任务。当用户帐户出错时,出现错误消息,此时没有错误。然而,当用户成功登录时,应用程序不幸停止。
爪哇:
public interface AsyncResponse {
void processFinish();
}
// start this activity from MainActivity when the button is pressed
public class login extends AppCompatActivity implements AsyncResponse{
...
BackgroundTask backgroundTask = new BackgroundTask(this);
backgroundTask.delegate = this;
backgroundTask.execute("login",user_ac_s,user_pw_s);
public void processFinish(){
if(!MainActivity.user_ID.equals("0"))
finish();
}
}
public class BackgroundTask extends AsyncTask<String, Void, String>{
...
public AsyncResponse delegate = null;
...
protected void onPostExecute(String result) {
super.onPreExecute();
if(task.equals("get_userID")){
MainActivity.user_ID = result;
delegate.processFinish();
}
if(task.equals("register") || task.equals("login")){
Toast.makeText(context,result,Toast.LENGTH_LONG).show();
if(result.contains("success")){
BackgroundTask get_userID_task = new BackgroundTask(context);
get_userID_task.execute("get_userID",user_ac);
}
}
}
}错误:?坠机的开始。
08-04 :53:11.807 2667-2667/com.example.kwei.minigame1E/AndroidRuntime:致命异常:主进程: com.example.kwei.minigame1,PID: 2667 java.lang.NullPointerException:尝试在空对象引用上调用接口方法‘java.lang.NullPointerException’在com.example上.kwei.minigame1.BackgroundTask.onPostExecute(BackgroundTask.java:132) at com.example.kwei.minigame1.BackgroundTask.onPostExecute(BackgroundTask.java:26) at android.os。android.os.AsyncTask.access$500(AsyncTask.java:177) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653的AsyncTask.finish(AsyncTask.java:636))在android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135)在android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(原生方法)在java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
发布于 2016-08-04 05:59:21
你的
AsyncResponse委托= null;
delegate为空。你还没初始化呢!
编辑:
构造函数
public AsyncResponse delegate;
public BackgroundTask(AsyncResponse delegate){
this.delegate = delagate;
}现在,使用
BackgroundTask backgroundTask = new BackgroundTask(new AsyncResponse()......);
backgroundTask.delegate = this;// Comment this
backgroundTask.execute("login",user_ac_s,user_pw_s);this关键字在您的情况下定义了活动的上下文,但实际上您需要为AsyncResponse获取它。
https://stackoverflow.com/questions/38759301
复制相似问题