【发布时间】:2014-12-12 10:40:00
【问题描述】:
我正在尝试在一个类中一个一个地执行两个 AsyncTask。
我试过这样
class LoginProcess extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Login_Activity.this);
pDialog.show();
}
protected String doInBackground(String... args) {
//Request Making
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
try {
if(login){
//Call another AsyncTask
new GetFav().execute();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class GetFav extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Login_Activity.this);
pDialog.show();
}
@SuppressLint("ShowToast")
protected String doInBackground(String... args) {
try {
//Request Making
//Getting the results from response
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
}
第一个任务是登录活动。第二个任务是获取favDetails。 它在模拟器中运行良好。但是当我尝试在移动设备中执行时,我遇到了错误。登录成功后页面导航。但是 favDetails 是空的。导航后,只有 favDetail 任务在设备中执行。请告诉我如何在一个类中一个一个地使用两个异步任务。
我的错误是:-
12-12 06:34:47.641: E/AndroidRuntime(31294): Process: info.androidhive.googlemapsv2, PID: 31294
12-12 06:34:47.641: E/AndroidRuntime(31294): java.lang.NullPointerException
12-12 06:34:47.641: E/AndroidRuntime(31294): at info.androidhive.slidingmenu.ExpandableDrawerAdapter.getChildrenCount(ExpandableDrawerAdapter.java:61)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.widget.ExpandableListConnector.refreshExpGroupMetadataList(ExpandableListConnector.java:567)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.widget.ExpandableListConnector.expandGroup(ExpandableListConnector.java:698)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:698)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:651)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.widget.AbsListView$PerformClick.run(AbsListView.java:3467)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.widget.AbsListView$3.run(AbsListView.java:4830)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.os.Handler.handleCallback(Handler.java:733)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.os.Handler.dispatchMessage(Handler.java:95)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.os.Looper.loop(Looper.java:146)
12-12 06:34:47.641: E/AndroidRuntime(31294): at android.app.ActivityThread.main(ActivityThread.java:5602)
12-12 06:34:47.641: E/AndroidRuntime(31294): at java.lang.reflect.Method.invokeNative(Native Method)
12-12 06:34:47.641: E/AndroidRuntime(31294): at java.lang.reflect.Method.invoke(Method.java:515)
12-12 06:34:47.641: E/AndroidRuntime(31294): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
12-12 06:34:47.641: E/AndroidRuntime(31294): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
12-12 06:34:47.641: E/AndroidRuntime(31294): at dalvik.system.NativeStart.main(Native Method)
单击幻灯片菜单时出现此错误。我在运行时加载幻灯片菜单项。现在项目是空的。这就是我收到错误的原因。
我的第一个页面是登录页面。第二页是欢迎页面。在那个页面中,我有带有动态项目的幻灯片菜单。所有项目都将出现在登录屏幕上。如果登录成功,我将从服务器获取项目并将项目加载到幻灯片菜单。但是第二个 asyncTask 不起作用。这就是我收到此错误的原因。
现在请告诉我一个一个执行 AsyncTask 的想法。
抱歉英语不好..
提前谢谢..
【问题讨论】:
-
您可以在第一个的 postExecute() 上调用另一个,或者您可以使用:SERIAL_EXECUTOR。
-
@Kanchan,不,他不能在没有手动操作的情况下使用 SERIAL_EXECUTOR,因为第二个任务是有条件地执行的
-
我想知道,为什么不能将所有代码放在一个 AsyncTask 中,而不是使用两个?
-
@Christopher.. 如果登录成功,那么只有另一个任务应该运行。否则它不应该运行..
-
@NewDeveloper 在登录任务后导航到欢迎页面并启动 GetFav 任务?