当前位置: 首页 > 知识库问答 >
问题:

android-只在asynctask完成后完成当前活动

锺离明煦
2023-03-14
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 266 7-2667/com.example.kwei.minigame1 E/AndroidRuntime:致命异常:main process:com.example.kwei.minigame1,PID:2667 java.lang.nullpointerException:试图在com.example.kwei.minigame1.backgroundTask.onPostExecute(backgroundTask.java:26)的com.example.kwei.minigame1.backgroundTask.onPostExecute(.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.app.activitythread.main(activitythread.java:5254)在java.lang.reflect.method.invoke(原生方法)在.java:372)at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:903)at com.Android.internal.os.zygoteinit.main(zygoteinit.java:698)

共有1个答案

柳涵映
2023-03-14

您的

AsyncResponse委托=null;

委托为空。你还没初始化!

  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);
 类似资料:
  • 问题内容: 由于某种原因,我完成后没有被调用。 我的班级干事: 我的onPostExecute(): 一切正常,我成功完成并返回一个布尔值,但随后就结束了。 谢谢 问题答案: 您是否在UI线程上创建了AsyncTask?还要在onPostExecute()方法上添加一个@Override注释,以确保正确声明了它。

  • 这里是我的AsyncTask方法: 如何调用profileDefaults()?是我的活动。我需要在OnPostExecute之后调用它!

  • 问题内容: 我通过将操作拆分为可用的确切内核数来并行化操作,然后通过启动相同数量的AsyncTask,对数据的不同部分执行相同的操作。 我正在使用以并行化它们的执行。 我想知道每个线程何时完成其工作,以便结合所有结果并执行进一步的操作。 我能怎么做? 问题答案: 您还可以简单地将共享库中的计数器递减作为的一部分。由于在同一线程(主线程)上运行,因此您不必担心同步。 更新1 共享对象可能看起来像这样

  • 根据Espresso文档,检测测试应该自动等待完成。但它不起作用。我创建了这个简单的测试用例: 返回UI线程时测试应该失败,但它总是成功。这是测试的logcat输出: 正如您所看到的,测试在后台方法执行之前就已经完成了。我怎样才能让考试等待呢?

  • 我想在当前的中启动一个通知,即。当我按下通知时,我想输入。 但是,我不希望当前的在中完成。因为我正在接收数据,当我按下后退按钮时,我想留在。 关键是我不想让结束,不管我目前在哪个中。 那我该怎么办? 这是密码 问题是: 现在我输入,当我按下后退按钮时,我返回桌面。意味着已经完成了我不想要的。 这里是主要的

  • 我正在尝试构建一个使用条形码阅读器的android应用程序。 null 以上所有操作都按预期工作,但在onActivityResult事件处理之后,应用程序终止。 在日志文件中,我只能找到一个通用的app-kill消息 您可以在下面找到代码片段并注销。 马蒂亚