yiranwujixian 2012-10-08 02:18 采纳率: 100%
浏览 7057
已采纳

Android:ProgressDialog.show() 和getApplicationContext冲突

我不能理解为什么会有冲突发生。下边的代码没有什么问题:

mProgressDialog= ProgressDialog.show(this, "", getString(R.string.loading), true);

但是这个代码抛出异常:

mProgressDialog= ProgressDialog.show(getApplicationContext(), "", getString(R.string.loading), true);


W/WindowManager(  569): Attempted to add windowwith non-application tokenWindowToken{438bee58 token=null}.  Aborting.
D/AndroidRuntime( 2049): Shutting down VMW/dalvikvm( 2049): threadid=3: thread exitingwith uncaught exception(group=0x4001aa28)
E/AndroidRuntime( 2049): Uncaught handler: thread main exiting due to uncaught exceptionE/AndroidRuntime( 2049): java.lang.RuntimeException: Unable to start activityComponentInfo{com.tastekid.TasteKid/com.tastekid.TasteKid.YouTube}: android.view.WindowManager$BadTokenException: Unable to add window-- tokennull is not for an application
E/AndroidRuntime( 2049):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
E/AndroidRuntime( 2049):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
E/AndroidRuntime( 2049):    at android.app.ActivityThread.access$2100(ActivityThread.java:116)
E/AndroidRuntime( 2049):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
E/AndroidRuntime( 2049):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 2049):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 2049):    at android.app.ActivityThread.main(ActivityThread.java:4203)
E/AndroidRuntime( 2049):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 2049):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 2049):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
E/AndroidRuntime( 2049):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
E/AndroidRuntime( 2049):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 2049): Caused by: android.view.WindowManager$BadTokenException: Unable to add window-- tokennull is not for an application
E/AndroidRuntime( 2049):    at android.view.ViewRoot.setView(ViewRoot.java:460)
E/AndroidRuntime( 2049):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
E/AndroidRuntime( 2049):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
E/AndroidRuntime( 2049):    at android.app.Dialog.show(Dialog.java:238)
E/AndroidRuntime( 2049):    at android.app.ProgressDialog.show(ProgressDialog.java:107)
E/AndroidRuntime( 2049):    at android.app.ProgressDialog.show(ProgressDialog.java:90)
E/AndroidRuntime( 2049):    at com.tastekid.TasteKid.YouTube.onCreate(YouTube.java:45)
E/AndroidRuntime( 2049):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
E/AndroidRuntime( 2049):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
E/AndroidRuntime( 2049):    ... 11 more

有人知道为什么会发生这个么?我从onCreate方法调用的这个。

  • 写回答

3条回答 默认 最新

  • 漫随风起 2012-10-08 03:10
    关注

    你用的是哪个API版本?如果我的答案整好回答了你的问题,那么应该是android1.6(API版本是4)

    看起来好像是object的getApplicationContext() 参数仅仅是指向了空。我想你现在遇到的问题和曾经我遇到过的一个问题很相似,在那个问题中,onCreate()中的代码在窗体确实被创建之前都运行的很好。这是一个黑客,但是尝试在几百毫秒(这个: 我用的是300-400,但是你可能需要改一下)的时间内启动一个新的线程,那将打开你的ProgressDialog然后任何你需要的都可以了(例如网络IO)。就像这样:

    @Override
    public void onCreate(Bundle savedInstanceState) {
    
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mProgressDialog = ProgressDialog.show(
                   YouTube.this.getApplicationContext(), "",
                   YouTube.this.getString(R.string.loading), true);
    
            }
        }, 1000); 
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容