gpt4 book ai didi

java - 从 GCMIntentService 调用 AsyncTask 时应用程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 14:17:54 24 4
gpt4 key购买 nike

我正在尝试从 GCMBaseIntentService 运行 AsyncTask,但是当我这样做时应用程序崩溃了。令人感动的是,我想使用 MainActivity 中的上下文来让我的 AsyncTask 工作(显示 ProgressDialog <-- 需要上下文)。当我从 MainActivity 执行相同操作时,它可以工作,但是当我尝试从 GCMIntentService 调用 AsyncTask 时,没有显示 ProgressDialog - 我该怎么做?或者还有其他方法可以调用 AsyncTask 吗?

我想每次消息到达时调用 AsyncTask (onMessage())几周来我一直在尝试解决这个问题,但仍然没有任何提示

以下是我的部分代码:

MainActivity.java

   public class MainActivity extends Activity {


public static Context getAppContext() {
return MainActivity.mContext;
}

onCreate(MainActivity.java)

MainActivity.mContext = MainActivity.this;

我的异步任务:

public class AsyncTask extends AsyncTask<String,String,String> {

Context mContext;


public AsyncTask(Context mContext) {
this.mContext = mContext;

}

GCMintentService onMessage():

AsyncTask doStuff= new AsyncTask(MainActivity.getAppContext());
doStuff.execute();

编辑:

当我在 GCM 中使用 MainActivity.getAppContext() 作为上下文时

AsyncTask 确实运行,执行所有操作,例如“DatabaseHandler db = new DatabaseHandler(mContext);”它执行所有数据库操作,我也可以在日志中看到这一点,但有很多警告。 例如,在 AsyncTask 中,未显示 ProgressDialog:

  pDialog = new ProgressDialog(mContext);
pDialog.setMessage("blablabla");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();

当我使用“this”而不是“MainActivity.getAppContext()”时

此日志出现:

 AndroidRuntime(3029): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
AndroidRuntime(3029): at android.view.ViewRootImpl.setView(ViewRootImpl.java:768)
AndroidRuntime(3029): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:278)
AndroidRuntime(3029): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
AndroidRuntime(3029): at android.app.Dialog.show(Dialog.java:289)
AndroidRuntime(3029): at com.test.app.AsyncTask.onPreExecute(AsyncTask.java:98)
AndroidRuntime(3029): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
AndroidRuntime(3029): at android.os.AsyncTask.execute(AsyncTask.java:535)
AndroidRuntime(3029): at com.test.app.GCMIntentService.onMessage(GCMIntentService.java:62)
AndroidRuntime(3029): at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:223)
AndroidRuntime(3029): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
AndroidRuntime(3029): at android.os.Handler.dispatchMessage(Handler.java:102)
AndroidRuntime(3029): at android.os.Looper.loop(Looper.java:136)
AndroidRuntime(3029): at android.os.HandlerThread.run(HandlerThread.java:61)

最佳答案

您正在尝试从服务打开对话框,我认为最好的办法是启动具有透明背景的 Activity 并从那里启动对话框。您可以从 Service

启动 Activity

关于java - 从 GCMIntentService 调用 AsyncTask 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27508193/

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