如何在Asynctask类中使用intent?

时间:2014-10-09 11:22:49

标签: android android-intent android-asynctask

请分享如何在doinbackground()或onpostexecute()方法中使用intent Asynctask类。当我尝试使用这些代码时,它会显示错误。

Intent intent = new Intent(asynctask.this, home.class);
startActivity(intent);
finish();

private Class<Home> clazz;
        public asynctask(Class<Home> clazz){
            this.clazz = clazz;
        }

Asynctask doInBackground()方法:

  protected Void doInBackground(Void... arg0) {
        // TODO Auto-generated method stub
        Intent intent = new Intent(this, clazz);
        startActivity(intent);
        finish();
        Toast.makeText(cxt, "welcome", Toast.LENGTH_SHORT).show();
        return null;
    }

5 个答案:

答案 0 :(得分:9)

试试这种方式,希望这可以帮助您解决问题。

如何asynctask类:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new MyCustomAsyncTask(this).execute();
 }

<强> MyCustomAsyncTask.java

public class MyCustomAsyncTask extends AsyncTask<Void,Void,Void> {
    private Context context;

    public MyCustomAsyncTask(Context context){
        this.context=context;
    }
    @Override
    protected void onPreExecute() {
        // write show progress Dialog code here
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        // write service code here
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        Toast.makeText(context, "welcome", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(context, home.class);
        context.startActivity(intent);
        ((Activity)context).finish();
    }
}

答案 1 :(得分:5)

将此意图部分移至onPostExecute(...) <{1}}方法

答案 2 :(得分:0)

doInBackground(Void... arg0)应该只执行后台任务 你应该在onPostExecute(...)方法中加入其他代码。这样当后台任务结束时,移动到其他活动。

**请勿尝试触摸doInBackground(....)您的应用可能会崩溃的用户界面。

答案 3 :(得分:0)

您无法与doInBackground(....)中的用户界面进行互动。您只能与onPostExecute(...)中的用户界面进行互动。就像线程一样,你无法在Thread for UI中与UI进行交互,我们使用Handler。

答案 4 :(得分:0)

始终将意图放在onPostExecute中。这将确保您的UI线程同步。

例如,如果您希望在收到正确的凭据时显示该用户应转移到下一个活动,否则应显示“无效凭据”消息,以防它们出错。您的onPostExecute应如下所示:

protected void onPostExecute(final Boolean success) {
     if(success){
         Intent intent = new Intent(<CurrentActivity>.this, <NextActivity>.class);
         startActivity(intent);
     }
     else{
         Toast.makeText(LoginActivity.this, "Invalid Credentials", Toast.LENGTH_SHORT).show();
     }
}