我在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;
}
}
}
答案 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;
希望有所帮助