Android:ProgressDialog在活动更改后抛出异常

时间:2014-06-27 14:45:24

标签: android progressdialog

06-27 15:35:26.598: E/AndroidRuntime(18210): FATAL EXCEPTION: main
06-27 15:35:26.598: E/AndroidRuntime(18210): Process: com.radioplymouth.RadioPlymouth, PID: 18210
06-27 15:35:26.598: E/AndroidRuntime(18210): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@41bf7a90 is not valid; is your activity running?
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.view.ViewRootImpl.setView(ViewRootImpl.java:597)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.app.Dialog.show(Dialog.java:291)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at com.radioplymouth.RadioPlymouth.MainActivity$1.onReceive(MainActivity.java:132)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.os.Handler.dispatchMessage(Handler.java:102)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.os.Looper.loop(Looper.java:157)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at android.app.ActivityThread.main(ActivityThread.java:5872)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at java.lang.reflect.Method.invokeNative(Native Method)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at java.lang.reflect.Method.invoke(Method.java:515)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
06-27 15:35:26.598: E/AndroidRuntime(18210):    at dalvik.system.NativeStart.main(Native Method)

进度对话框是MainActivity上广播接收器中的.show()。媒体播放器服务发送与主要

上的接收者相关的广播,加载,完成或错误
BroadcastReceiver LoadingReceiver = new BroadcastReceiver(){

    @SuppressLint("NewApi")
    @Override
    public void onReceive(Context arg0, Intent arg1) {

        progress = new ProgressDialog(MainActivity.this);
        progress.setTitle("Loading");
        progress.setMessage("Loading RadioPlymouth...");
        progress.show(); //error here
        Player.setImageResource(R.drawable.stop);
    }
};

首次打开应用程序时(首次创建MainActivity),它可以100%正常运行,没有任何问题。但是,当我改变活动时,&尝试再次启动该服务,抛出此错误。从对此错误的研究来看,大多数推理都是错误拼写或传递错误的上下文,而不是activityContext.this(如上所示)。

如果我退出活动,我有时可以让它重新开始工作,但大多数时候我必须强制停止或重新安装

更新:

@Override
    protected void onPause(){
    super.onPause();
    progress.dismiss();
}

我将此方法包含在我的MainActivity中,但问题仍然存在。 (我使用if与.isShowing())

尝试了.cancel()的变体

某处某事严重错误。删除onPause覆盖后,我可以很好地移动活动,但是在返回MainActivity之后,加载服务/进度对话框会导致崩溃,因为原始行会导致它(反之亦然)。我的一部分知道,如果我从我的项目中排除整个progressdialog部分,它将运行得很好,但我需要有一些形式的加载视觉通知。

参考jitain-sharma的评论;在广播接收器中,进度对话框被定义为新的。肯定这会解决令牌的任何问题,因为在调用进度对话框之前用户必须在mainactivity窗口上?


解决


我发现在progress.show()内调用if(!isFinishing())解决了这个问题。

1 个答案:

答案 0 :(得分:0)

问题是<ENVLOPE> </ENVLOPE>

当另一个活动类正在运行时,您正在使用MainActivity MainActivity.this