Android - Facebook登录首次导致onResume错误

时间:2013-09-04 15:23:37

标签: android login facebook-android-sdk onresume

我可以成功连接到Facebook并获取好友列表。所有连接都没问题。 但是当我删除Facebook的数据(通过设置 - >应用程序)和我的应用程序时,会出现登录问题。 [SDK 3.5]

  1. 启动我的应用
  2. 建立Facebook连接
  3. Facebook要求输入用户名和密码,输入
  4. 等一下
  5. 显示请求基本用户信息和错误的权限屏幕:“您的应用程序意外停止工作。请再试一次(强制关闭)”
  6. 当我单击强制关闭时,会再次突然发生同样的错误(同时权限屏幕仍然落后)。如果我足够快,我点击强制关闭然后允许权限,一切正常,我可以看到我的朋友。所以这个FORCE CLOSE错误意味着什么都没有?在日志中,有3-4个相同的致命异常消息,因为每次单击FORCE CLOSE时,都会再次出现错误。 当我在手机上尝试应用程序时出现此错误(SE Xperia Arc S,2.3.3)。但是当我尝试使用Emulators时,错误不会发生。它没有问题。 (模拟器是2.3.3和4.2)

        09-04 18:09:47.916 E/AndroidRuntime(29511): FATAL EXCEPTION: main
    09-04 18:09:47.916 E/AndroidRuntime(29511): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
    09-04 18:09:47.916 E/AndroidRuntime(29511): Caused by: java.lang.NullPointerException
    09-04 18:09:47.916 E/AndroidRuntime(29511):     ... 12 more
    09-04 18:09:51.526 E/AndroidRuntime(29538): FATAL EXCEPTION: main
    09-04 18:09:51.526 E/AndroidRuntime(29538): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
    09-04 18:09:51.526 E/AndroidRuntime(29538): Caused by: java.lang.NullPointerException
    09-04 18:09:51.526 E/AndroidRuntime(29538):     ... 12 more
    09-04 18:09:53.786 E/AndroidRuntime(29547): FATAL EXCEPTION: main
    09-04 18:09:53.786 E/AndroidRuntime(29547): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
    09-04 18:09:53.786 E/AndroidRuntime(29547): Caused by: java.lang.NullPointerException
    09-04 18:09:53.786 E/AndroidRuntime(29547):     ... 12 more
    09-04 18:09:55.516 E/AndroidRuntime(29557): FATAL EXCEPTION: main
    09-04 18:09:55.516 E/AndroidRuntime(29557): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
    09-04 18:09:55.516 E/AndroidRuntime(29557): Caused by: java.lang.NullPointerException
    09-04 18:09:55.516 E/AndroidRuntime(29557):     ... 12 more
    09-04 18:09:57.776 E/AndroidRuntime(29564): FATAL EXCEPTION: main
    09-04 18:09:57.776 E/AndroidRuntime(29564): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
    09-04 18:09:57.776 E/AndroidRuntime(29564): Caused by: java.lang.NullPointerException
    09-04 18:09:57.776 E/AndroidRuntime(29564):     ... 12 more
    09-04 18:09:59.186 E/dalvikvm(29571): Could not find class 'dalvik.system.BaseDexClassLoader', referenced from method com.facebook.common.dextricks.SystemClassLoaderAdder.a
    09-04 18:09:59.586 E/dalvik-internals(29571): Failed to look up ladDumpProfiles
    09-04 18:09:59.586 E/dalvik-internals(29571): Failed to look up ladResetProfiles
    09-04 18:09:59.586 E/dalvik-internals(29571): Failed to look up ladPrintHeaderInfo
    09-04 18:09:59.936 E/AndroidRuntime(29578): FATAL EXCEPTION: main
    09-04 18:09:59.936 E/AndroidRuntime(29578): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
    09-04 18:09:59.936 E/AndroidRuntime(29578): Caused by: java.lang.NullPointerException
    09-04 18:09:59.936 E/AndroidRuntime(29578):     ... 12 more
    09-04 18:10:02.006 E/AndroidRuntime(29585): FATAL EXCEPTION: main
    09-04 18:10:02.006 E/AndroidRuntime(29585): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
    09-04 18:10:02.006 E/AndroidRuntime(29585): Caused by: java.lang.NullPointerException
    09-04 18:10:02.006 E/AndroidRuntime(29585):     ... 12 more
    09-04 18:10:04.566 E/ONRESUME(29605): Onresume worked
    09-04 18:10:04.636 E/STATEM  (29605): OPENING
    09-04 18:10:05.186 E/ONRESUME(29605): Onresume worked
    

    第一次连接后,我可以毫无错误地找到我的朋友。它只是在我第一次连接Facebook并且它询问我的用户名和密码(然后点击登录)之后才发生

    @Override
      public void onCreate(Bundle savedInstanceState) {
    
        super.onCreate(savedInstanceState);
        uiHelper = new UiLifecycleHelper(this, callback);
        uiHelper.onCreate(savedInstanceState);
    
        setContentView(R.layout.activity_fb_findfriends);
        LinearLayout v = (LinearLayout) findViewById(R.id.fb_app_users);
        openSession(v);
    
      }
    
    public void openSession(View v){
            // start Facebook Login
            Session.openActiveSession(this, true, callback);
    
        }
    
    @Override
      protected void onResume() {
          super.onResume();
          uiHelper.onResume();
          Log.e("ONRESUME", "Onresume çalıştı");
      }
    
    private void requestMyAppFacebookFriends(Session session) {
            Request friendsRequest = createRequest(session);
            friendsRequest.setCallback(new Request.Callback() {
    
                @Override
                public void onCompleted(Response response) {
    
                    List<GraphUser> friends = getResults(response);
                    //Display Friends
                }
            });
        friendsRequest.executeAsync();
    }
    

    此外,我无法理解日志输出中的null。

    UPDATE! 我找到了发生错误的行。 它位于com.facebook.AuthorizationClient.java第135行

    void startOrContinueAuth(AuthorizationRequest request) {
            if (appEventsLogger == null || appEventsLogger.getApplicationId() != request.getApplicationId()) {
                Log.e("HATA!", "BOOM");
                appEventsLogger = AppEventsLogger.newLogger(context, request.getApplicationId());
            }
    

    这个startOrContinueAuth方法在com.Facebook.LoginActivity中被触发

    @Override
    public void onResume() {
        super.onResume();
    
        // If the calling package is null, this generally means that the callee was started
        // with a launchMode of singleInstance. Unfortunately, Android does not allow a result
        // to be set when the callee is a singleInstance, so we log an error and return.
        if (callingPackage == null) {
            Log.e(TAG, "Aheyy"+NULL_CALLING_PKG_ERROR_MSG);
            finish();
            return;
        }
    
        authorizationClient.startOrContinueAuth(request);
    }
            if (getInProgress()) {
                continueAuth();
            } else {
                authorize(request);
            }
        }
    

    更新2!

    • 我很困惑。我将我的应用程序简化为最基本的 openActiveSession()方法。崩溃
    • 我尝试了Facebook,FriendPicker等样本应用程序 使用相同的日志错误输出崩溃。
    • 尝试在模拟器上运行,但是当我旋转屏幕的时候 授权屏幕显示(取消 - 允许),发生相同的错误(无法 onResume blah blah ...) 在Facebook的示例应用程序上获得相同的错误很奇怪

4 个答案:

答案 0 :(得分:1)

我不认为这是您的应用的问题。人们一直在报告这个错误,我刚刚回答了类似的问题here。基本上Facebook昨天发布了他们的SDK的新版本,修复了AuthorizationClient中的onResume NPE崩溃。查看升级是否修复了您的问题。

答案 1 :(得分:0)

根据更改日志https://developers.facebook.com/docs/android/change-log-3.x/
在Facebook版本3.5.1修复了很多关于身份验证和应用程序事件日志记录的问题,所以可能已经解决了最新的一个版本,可以从https://github.com/facebook/facebook-android-sdk下载。 我希望它可以解决你的问题:)

答案 2 :(得分:0)

基本上,当调用活动不活动或被破坏时会出现此问题。在android中,登录后调用onActivityResult()方法。移动设备强制销毁活动(在开发人员选项设置中不启用活动选项)。请在开发人员选项设置中交叉检查“不启用或不禁用活动”。

答案 3 :(得分:0)

确保您的清单中的登录活动是纵向的。丢失活动有一个问题,如果它不是肖像......这是非常蹩脚的......:|