程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> android-Android:ProgressDialog.show() 和getApplicationContext沖突

android-Android:ProgressDialog.show() 和getApplicationContext沖突

編輯:編程綜合問答
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方法調用的這個。

最佳回答:


你用的是哪個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); 
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved