android-仅在asynctask完成后才完成当前活动 [英] android - finish the current activity only after the asynctask finishes
问题描述
我已经通过接口和回调函数实现了任务.当用户输入错误的帐户时,将显示错误消息,并且此时没有错误.但是,不幸的是,当用户成功登录时,该应用程序停止了.
I have implement task by interface and callback function. When the user got account wrong, the error message comes up and there are no errors at that point. However, the app stops unfortunately when the user login successfully.
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);
}
}
}
}
错误: ---------崩溃开始
Error: --------- beginning of crash
08-04 05:53:11.807 2667-2667/com.example.kwei.minigame1 E/AndroidRuntime:致命异常:main 流程:com.example.kwei.minigame1,PID:2667 java.lang.NullPointerException:尝试调用接口方法 'void com.example.kwei.minigame1.AsyncResponse.processFinish()'在 空对象引用 在 com.example.kwei.minigame1.BackgroundTask.onPostExecute(BackgroundTask.java:132) 在 com.example.kwei.minigame1.BackgroundTask.onPostExecute(BackgroundTask.java:26) 在android.os.AsyncTask.finish(AsyncTask.java:636) 在android.os.AsyncTask.access $ 500(AsyncTask.java:177) 在 android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:653) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5254) 在java.lang.reflect.Method.invoke(本机方法) 在java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
08-04 05:53:11.807 2667-2667/com.example.kwei.minigame1 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.kwei.minigame1, PID: 2667 java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.kwei.minigame1.AsyncResponse.processFinish()' on a null object reference at com.example.kwei.minigame1.BackgroundTask.onPostExecute(BackgroundTask.java:132) at com.example.kwei.minigame1.BackgroundTask.onPostExecute(BackgroundTask.java:26) at android.os.AsyncTask.finish(AsyncTask.java:636) at android.os.AsyncTask.access$500(AsyncTask.java:177) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) 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:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
推荐答案
您的
AsyncResponse委托= null;
AsyncResponse delegate = null;
delegate
为空.您尚未初始化!
delegate
is null. You haven't initialized that !
构造器
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
.
this
keyword defines the activity's context in your case but actually you need to get for AsyncResponse
.
这篇关于android-仅在asynctask完成后才完成当前活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!