首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android -只有在异步任务完成后才能完成当前活动。

android -只有在异步任务完成后才能完成当前活动。
EN

Stack Overflow用户
提问于 2016-08-04 05:45:40
回答 1查看 965关注 0票数 0

我通过接口和回调函数来实现任务。当用户帐户出错时,出现错误消息,此时没有错误。然而,当用户成功登录时,应用程序不幸停止。

爪哇:

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-04 05:59:21

你的

AsyncResponse委托= null;

delegate为空。你还没初始化呢!

编辑:

构造函数

代码语言:javascript
复制
  public AsyncResponse delegate;

  public BackgroundTask(AsyncResponse delegate){
    this.delegate = delagate;
  }

现在,使用

代码语言:javascript
复制
  BackgroundTask backgroundTask = new BackgroundTask(new AsyncResponse()......);
  backgroundTask.delegate = this;// Comment this 
  backgroundTask.execute("login",user_ac_s,user_pw_s);

this关键字在您的情况下定义了活动的上下文,但实际上您需要为AsyncResponse获取它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38759301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档