【问题标题】:Can't start activity from onPostExecute无法从 onPostExecute 开始活动
【发布时间】:2015-03-25 18:30:48
【问题描述】:

我有一个AsyncTask,我在其中向服务器发出请求并下载一些数据。根据收到的数据,我在onPostExecute() 中启动Activity AActivity B

问题是那行不通。没有错误,只是活动没有开始。似乎代码根本没有在那里执行。

private class LoadingAsyncTask extends AsyncTask<Boolean, Void, Boolean> {

    protected Void doInBackground(Boolean... params) {
        if (InternetConnection.isConnected(ActivityLoading.this)) {
            .....load data
        } else {
            Toast.makeText(ActivityLoading.this, getString(R.string.no_internet_connection), Toast.LENGTH_SHORT).show();
        }

        isDone = true;
        return isDone;            
    }


    protected void onPostExecute(Void isDone) {
        super.onPostExecute(isDone);
        //if work is done
        if (isDone) {
            if (dwnlData.equals("success")) {
            getApplicationContext().startActivity(new Intent(ActivityLoading.this, ActivityNavigation.class));
        } else {
            getApplicationContext().startActivity(new Intent(ActivityLoading.this, ActivityAuthorization.class));
        }
    }
}

我在onCreate中调用AsyncTask:

public class ActivityLoading extends ActionBarActivity {
static boolean isDone = false;

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

    new LoadingAsyncTask().execute();

}

【问题讨论】:

    标签: android android-activity android-asynctask


    【解决方案1】:

    将参数数据类型 void 更改为布尔值

    protected void onPostExecute(boolean isDone) {
        super.onPostExecute(isDone);
        //if work is done
        if (isDone) {
            if (dwnlData.equals("success")) {
            getApplicationContext().startActivity(new Intent(ActivityLoading.this, ActivityNavigation.class));
        } else {
            getApplicationContext().startActivity(new Intent(ActivityLoading.this, ActivityAuthorization.class));
        }
    }
    

    【讨论】:

      【解决方案2】:

      您是否尝试将 isDone 设为布尔值?

      编辑 - 你可以让 doInBackground 什么都不返回,并停止使用 onPostExecute 中的参数。

      【讨论】:

        【解决方案3】:

        我建议在 if{} 块中使用 Log.d() 或 Toast() 来验证您的条件是否为真

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-15
          • 2021-10-26
          • 1970-01-01
          • 2018-03-12
          • 2023-04-03
          相关资源
          最近更新 更多