无法从 onPostExecute 开始 activity
Can't start activity from onPostExecute
我有一个 AsyncTask
,我可以在其中向服务器发出请求并下载一些数据。根据收到的数据,我在 onPostExecute()
.
中开始 Activity A
或 Activity B
问题是这不起作用。没有错误,只是 activity 没有启动。似乎根本没有在那里执行代码。
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();
}
您是否尝试过将 isDone 设为布尔值?
编辑 - 您可以将 doInBackground return 设为空,并停止在 onPostExecute 中使用参数。
将参数数据类型 void 更改为 boolean
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));
}
}
我建议在这些 if{} 块中使用 Log.d() 或 Toast() 来验证您的条件是否为真
我有一个 AsyncTask
,我可以在其中向服务器发出请求并下载一些数据。根据收到的数据,我在 onPostExecute()
.
Activity A
或 Activity B
问题是这不起作用。没有错误,只是 activity 没有启动。似乎根本没有在那里执行代码。
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();
}
您是否尝试过将 isDone 设为布尔值?
编辑 - 您可以将 doInBackground return 设为空,并停止在 onPostExecute 中使用参数。
将参数数据类型 void 更改为 boolean
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));
}
}
我建议在这些 if{} 块中使用 Log.d() 或 Toast() 来验证您的条件是否为真