如何在Asynck任务中启动活动?

时间:2016-06-21 05:05:27

标签: android android-asynctask

我在Asynctask中执行意图时遇到错误。请说明如何...

public class Livechat extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_livechat);

    MyTask myTask = new MyTask();
    myTask.execute();

}

private class MyTask extends AsyncTask <Void,Void,Void>{


    @Override
    protected Void doInBackground(Void... params) {


        Intent intent = new Intent(this, ChatWindowActivity.class);
        intent.putExtra(ChatWindowActivity.KEY_GROUP_ID, "3");
        intent.putExtra(ChatWindowActivity.KEY_LICENCE_NUMBER, "7584151");
        startActivity(intent);

        return null;
    }
  }
}

4 个答案:

答案 0 :(得分:0)

AsyncTask实际上是活动类中的另一个类,因此使用Activity类上下文切换到另一个活动,因为“this”指的是“class MyTask”上下文。 使用'Livechat.this'而不是'this'。

        Intent intent = new Intent(Livechat.this, ChatWindowActivity.class);
        intent.putExtra(ChatWindowActivity.KEY_GROUP_ID, "3");
        intent.putExtra(ChatWindowActivity.KEY_LICENCE_NUMBER, "7584151");
        startActivity(intent);

答案 1 :(得分:0)

您可能会遇到在doInBackground中启动意图的问题,在 onPostExecute

中启动意图
 @Override
protected void onPostExecute(Void aVoid) {
    Intent intent = new Intent(Livechat.this, ChatWindowActivity.class);
    intent.putExtra(ChatWindowActivity.KEY_GROUP_ID, "3");
    intent.putExtra(ChatWindowActivity.KEY_LICENCE_NUMBER, "7584151");
    startActivity(intent);
}

答案 2 :(得分:0)

错误在此行

    Intent intent = new Intent(this, ChatWindowActivity.class);

“this”在这里不起作用,因为你在AyncTask中,这将只是AsyncTask的实例。你应该在这里使用Livechat.this,它会工作。

答案 3 :(得分:0)

活动启动和其他UI更新任务应该在UiThread上执行而不是作为后台任务,因此您应该始终在`onPostExecute&#39;

中执行这些任务

像这个例子:

private class MyTask extends AsyncTask <Void,Void,Void>{

    @Override
    protected Void doInBackground(Void... params) { 

    // Perfrom other actions that you want to get done before launching other activity.
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {

        Intent intent = new Intent(Livechat.this, ChatWindowActivity.class);
        intent.putExtra(ChatWindowActivity.KEY_GROUP_ID, "3");
        intent.putExtra(ChatWindowActivity.KEY_LICENCE_NUMBER, "7584151");
        startActivity(intent);
    }
}

但是在你的情况下,如果你只是想启动活动,那么就不会使用AsyncTask但是如果你想在活动启动之前执行一些动作,那么你可以在`doInBackground&#39;

希望有所帮助