[英]android - finish the current activity only after the asynctask finishes
我已经通过接口和回调函数实现任务。 当用户输入错误的帐户时,将显示错误消息,并且此时没有错误。 但是,不幸的是,当用户成功登录时,该应用程序停止了。
Java:
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 05:53:11.807 2667-2667 / com.example.kwei.minigame1 E / AndroidRuntime:致命例外:主进程:com.example.kwei.minigame1,PID:2667 java.lang.NullPointerException:尝试调用接口com.example.kwei.minigame1上com.example.kwei.minigame1.BackgroundTask.onPostExecute(BackgroundTask.java:132)上的空对象引用上的方法'void com.example.kwei.minigame1.AsyncResponse.processFinish()'。 android.os.AsyncTask.finish(AsyncTask.java:636)的BackgroundTask.onPostExecute(BackgroundTask.java:26)android.os.AsyncTask.access $ 500(AsyncTask.java:177)android.os.AsyncTask $ InternalHandler。 android.os.Handler.dispatchMessage(Handler.java:102)的handleMessage(AsyncTask.java:653)android.app.ActivityThread.main(ActivityThread.java)的android.os.Looper.loop(Looper.java:135)的handleMessage(AsyncTask.java:653) :5254),位于java.lang.reflect.Method.invoke(本机方法),位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit)的java.lang.reflect.Method.invoke(Method.java:372)处.java:903)。 android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
你的
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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.