2012-11-22 62 views
0

我知道该异常来自未被解雇的对话框。登录活动已泄露窗口

这里是一个崩溃的应用程序(下面的代码是活动的主要部分,其他的都只是小功能(没有对话活动)

public void facebookLogin() 
{ 
    shareAppPreferences = new AppPreferences(getApplicationContext()); 
    facebook = new Facebook("something");//((GlobalVars)getApplicationContext()).facebook; 

    String access_token = shareAppPreferences.getAccessToken(); 
    Long expires = shareAppPreferences.getAccessExpires(); 
    Log.d("MyTag","token:" +access_token); 
    if(access_token != null) { 
     facebook.setAccessToken(access_token); 
    } 
    if(expires != 0) { 
     facebook.setAccessExpires(expires); 
    } 
    /* 
     * Only call authorize if the access_token has expired. 
     */ 
    if(!facebook.isSessionValid()) { 
     Log.d("MyTag","In Authorize"); 
      facebook.authorize(this, new String[] {"publish_stream", "email"}, Facebook.FORCE_DIALOG_AUTH, new DialogListener() { 
       public void onComplete(Bundle values) { 

        shareAppPreferences.saveAccessToken(facebook.getAccessToken()); 
        Log.d("MyTag","face token: " +facebook.getAccessToken()); 
        shareAppPreferences.saveAccessExpires(facebook.getAccessExpires()); 

       } 

       public void onFacebookError(FacebookError e) { 
       Toast.makeText(getApplicationContext(), "onFacebookError", Toast.LENGTH_SHORT).show(); 
      } 

      public void onError(DialogError e) { 
       Toast.makeText(getApplicationContext(), "onError", Toast.LENGTH_SHORT).show(); 
      } 
      public void onCancel() { 

      } 
      }); 
    } 
    new AccessKeyTask().execute("someURL"); 
    Intent intent = new Intent(this,MainActivity.class); 
    Log.d("MyTag", "starting activity"); 
    startActivity(intent); 

} 

这里的logcat的例外部分:

11-22 18:32:06.484: I/MapActivity(19687): Handling network change notification:CONNECTED 
11-22 18:32:06.488: E/MapActivity(19687): Couldn't get connection factory client 
11-22 18:32:06.707: E/WindowManager(19687): Activity com.inturnex.allaround.Login has leaked window [email protected] that was originally added here 
11-22 18:32:06.707: E/WindowManager(19687): android.view.WindowLeaked: Activity com.inturnex.allaround.Login has leaked window [email protected] that was originally added here 
11-22 18:32:06.707: E/WindowManager(19687):  at android.view.ViewRoot.<init>(ViewRoot.java:260) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.view.Window$LocalWindowManager.addView(Window.java:424) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.app.Dialog.show(Dialog.java:241) 
11-22 18:32:06.707: E/WindowManager(19687):  at com.facebook.android.Facebook.dialog(Facebook.java:839) 
11-22 18:32:06.707: E/WindowManager(19687):  at com.facebook.android.Facebook.startDialogAuth(Facebook.java:368) 
11-22 18:32:06.707: E/WindowManager(19687):  at com.facebook.android.Facebook.authorize(Facebook.java:231) 
11-22 18:32:06.707: E/WindowManager(19687):  at com.inturnex.allaround.Login.facebookLogin(Login.java:147) 
11-22 18:32:06.707: E/WindowManager(19687):  at com.inturnex.allaround.Login.onCreate(Login.java:55) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1628) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1680) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.os.Looper.loop(Looper.java:130) 
11-22 18:32:06.707: E/WindowManager(19687):  at android.app.ActivityThread.main(ActivityThread.java:3703) 
11-22 18:32:06.707: E/WindowManager(19687):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-22 18:32:06.707: E/WindowManager(19687):  at java.lang.reflect.Method.invoke(Method.java:507) 
11-22 18:32:06.707: E/WindowManager(19687):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
11-22 18:32:06.707: E/WindowManager(19687):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
11-22 18:32:06.707: E/WindowManager(19687):  at dalvik.system.NativeStart.main(Native Method) 
11-22 18:32:07.402: D/PhoneWindow(19687): couldn't save which view has focus because the focused view [email protected] has no id. 
11-22 18:32:07.402: D/PhoneWindow(19687): couldn't save which view has focus because the focused view [email protected] has no id. 
+0

并不是说它会解决您的问题,而是尝试用'getBaseContext()'替换'getApplicationContext()'。更好的办法是,将'getBaseContext()'赋值给一个变量并使用它。 –

回答

3

当你的会话是无效的,你进入该if语句和执行一些Facebook登录的代码,这将打开一个对话框。您不会停止代码的进度,因此此块仍然会运行,即使它不应该直到Facebook身份验证完成。

new AccessKeyTask().execute("someURL"); 
Intent intent = new Intent(this,MainActivity.class); 
Log.d("MyTag", "starting activity"); 
startActivity(intent); 

我建议把这个代码放到一个函数调用completeLogin或东西,加入来电转接到您onComplete并添加一个else到您的会话条件这就要求completeLogin也。

+0

非常感谢你,没有注意到它..修正了我的问题! – idish

0

什么线147?11-22 18:32:06.707: E/WindowManager(19687): at com.inturnex.allaround.Login.facebookLogin(Login.java:147)

恰好我的怀疑是一个的错误正在被调用,并且您正试图在UI线程关闭后显示Toast

尝试使用runOnUIThread()

+0

在147中有facebook.authorize(...)。该代码行显示在代码片段的上方。 – idish

相关问题