gpt4 book ai didi

android - ProgressDialog 没有出现在 AsyncTask 中

转载 作者:行者123 更新时间:2023-11-29 18:09:55 25 4
gpt4 key购买 nike

我在从 Web 服务检索数据时使用了 AsyncTask。当我从 Web 服务器获取数据时,我想显示一个 ProgressDialog。以下是代码 fragment 。

我初始化进度对话框并在 onCreate 中调用异步任务对象并调用异步任务:

public class MyDashboardActivity extends Activity {
ProgressDialog mProgressDialog;
static final int LOADING_DIALOG = 0;

private FetchDashboardEntriesProcess mTask;
private boolean mShownDialog;
private MyDashboardActivity act = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mydashboard);
mTask = new FetchDashboardEntriesProcess(MyDashboardActivity.this);
mTask.execute(null,null,null);
}

private class FetchDashboardEntriesProcess extends AsyncTask<Object, Void, Void> {

private MyDashboardActivity activity;
private boolean completed;



private ArrayList<DashboardEntry> returnVal = new ArrayList<DashboardEntry>();

private FetchDashboardEntriesProcess(MyDashboardActivity activity) {
this.activity = activity;
}

public ArrayList<DashboardEntry> getAllDashboardEntry() {
return returnVal;
}

@Override
protected void onPreExecute() {
if (!completed) {

activity.showDialog(LOADING_DIALOG);

}
}

@Override
protected Void doInBackground(Object... params) {
try {
ServiceCall call = new ServiceCall();
DashboardEntryCriteria bean = new DashboardEntryCriteria();
StringBuilder dateStr = new StringBuilder();

bean.setLoginId("300");
returnVal = call.getDashboardEntries(bean);

} catch (Exception e) {
Log.d(TAG, "Exception" + e.toString());
e.printStackTrace();
}
return null;

}

@Override
protected void onPostExecute(Void unused) {
completed = true;

notifyActivityTaskCompleted();

}

private void setActivity(MyDashboardActivity activity) {
this.activity = activity;
if (completed) {
notifyActivityTaskCompleted();
}
}
private void notifyActivityTaskCompleted() {
if (null != activity) {
activity.onTaskCompleted();

}
}
}
private void onTaskCompleted() {
Log.e(TAG, "Activity " + this
+ " has been notified the task is complete.");
dashboardEntries = mTask.getAllDashboardEntry();
fillDashboardEntries(dashboardEntries);

if (mShownDialog) {
dismissDialog(LOADING_DIALOG);

}
}

@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
if (id == LOADING_DIALOG) {
mShownDialog = true;
}
}

@Override
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
if (id == LOADING_DIALOG) {
mProgressDialog = Functions.getProgressDialog(act,
getString(R.string.all_retriving_data));
return mProgressDialog;
}
return super.onCreateDialog(id);
}
}

根据日志,程序在 activity.showDialog(LOADING_DIALOG); 行的 onPreExecute 处中断,所以我猜测错误是由于某些错误而产生的用我创建对话框的方式。我该如何克服这个问题?

谢谢。

编辑:登录猫

07-02 19:41:53.433: D/dalvikvm(335): GC_EXTERNAL_ALLOC freed 61K, 52% free 2600K/5379K,   external 1625K/2137K, paused 79ms

07-02 19:41:58.214: I/myproject(335): Activity com.myproject.activities.LoginActivity@405293b0 has been notified the task is complete.
07-02 19:41:58.745: D/dalvikvm(335): GC_EXTERNAL_ALLOC freed 271K, 52% free 2721K/5639K, external 3579K/3826K, paused 152ms

07-02 19:41:59.644: E/RESULT:(335): GetDashboardEntriesResponse{GetDashboardEntriesResult=anyType{}; }

07-02 19:41:59.654: E/Some Exception(335): Some Exception
07-02 19:41:59.664: W/System.err(335): java.lang.NullPointerException
07-02 19:41:59.664: W/System.err(335): at android.app.Dialog.<init> (Dialog.java:141)
07-02 19:41:59.664: W/System.err(335): at android.app.AlertDialog.<init>(AlertDialog.java:63)
07-02 19:41:59.674: W/System.err(335): at android.app.ProgressDialog.<init>(ProgressDialog.java:80)
07-02 19:41:59.674: W/System.err(335): at android.app.ProgressDialog.<init>(ProgressDialog.java:76)
07-02 19:41:59.674: W/System.err(335): at com.myproject.utils.Functions.getProgressDialog(Functions.java:54)
07-02 19:41:59.674: W/System.err(335): at com.myproject.activities.MyDashboardActivity.onCreateDialog(MyDashboardActivity.java:178)
07-02 19:41:59.674: W/System.err(335): at android.app.Activity.onCreateDialog(Activity.java:2482)
07-02 19:41:59.674: W/System.err(335): at android.app.Activity.createDialog(Activity.java:882)
07-02 19:41:59.674: W/System.err(335): at android.app.Activity.showDialog(Activity.java:2557)
07-02 19:41:59.674: W/System.err(335): at android.app.Activity.showDialog(Activity.java:2524)
07-02 19:41:59.674: W/System.err(335): at com.myproject.activities.MyDashboardActivity$FetchDashboardEntriesProcess.onPreExecute(MyDashboardActivity.java:211)
07-02 19:41:59.674: W/System.err(335): at android.os.AsyncTask.execute(AsyncTask.java:391)
07-02 19:41:59.674: W/System.err(335): at com.myproject.activities.MyDashboardActivity.onCreate(MyDashboardActivity.java:159)
07-02 19:41:59.674: W/System.err(335): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-02 19:41:59.684: W/System.err(335): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
07-02 19:41:59.684: W/System.err(335): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1487)
07-02 19:41:59.684: W/System.err(335): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
07-02 19:41:59.684: W/System.err(335): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
07-02 19:41:59.684: W/System.err(335): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
07-02 19:41:59.684: W/System.err(335): at android.widget.TabHost.setCurrentTab(TabHost.java:326)
07-02 19:41:59.684: W/System.err(335): at android.widget.TabHost.addTab(TabHost.java:216)
07-02 19:41:59.684: W/System.err(335): at com.myproject.activities.IncludeTabActivity.onCreate(IncludeTabActivity.java:52)
07-02 19:41:59.684: W/System.err(335): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-02 19:41:59.684: W/System.err(335): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
07-02 19:41:59.684: W/System.err(335): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
07-02 19:41:59.694: W/System.err(335): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-02 19:41:59.694: W/System.err(335): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
07-02 19:41:59.694: W/System.err(335): at android.os.Handler.dispatchMessage(Handler.java:99)
07-02 19:41:59.694: W/System.err(335): at android.os.Looper.loop(Looper.java:123)
07-02 19:41:59.694: W/System.err(335): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-02 19:41:59.694: W/System.err(335): at java.lang.reflect.Method.invokeNative(Native Method)
07-02 19:41:59.704: W/System.err(335): at java.lang.reflect.Method.invoke(Method.java:507)
07-02 19:41:59.704: W/System.err(335): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-02 19:41:59.704: W/System.err(335): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-02 19:41:59.704: W/System.err(335): at dalvik.system.NativeStart.main(Native Method)

最佳答案

对我来说,变量 act 总是 null

Assing activity to act 或者试试这个:

mProgressDialog = Functions.getProgressDialog(MyDashboardActivity.this,
getString(R.string.all_retriving_data));

关于android - ProgressDialog 没有出现在 AsyncTask 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11299592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com