android-仅在asynctask完成后才完成当前活动 [英] android - finish the current activity only after the asynctask finishes

查看:76
本文介绍了android-仅在asynctask完成后才完成当前活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经通过接口和回调函数实现了任务.当用户输入错误的帐户时,将显示错误消息,并且此时没有错误.但是,不幸的是,当用户成功登录时,该应用程序停止了.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆