Facebook登录android异常

时间:2014-06-10 09:53:46

标签: android facebook

当我在Android应用程序中使用facebook集成时,点击facbook按钮异常后 -

PossibleCursorLeak:content://com.facebook.katana.provider.PlatformProvider/versions,QueryCounter:14
 android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
 android.content.ContentResolver.query(ContentResolver.java:399)
 android.content.ContentResolver.query(ContentResolver.java:316)
 com.facebook.internal.NativeProtocol.getLatestAvailableProtocolVersionForAppInfo(NativeProt ocol.java:506)
com.facebook.internal.NativeProtocol.getLatestAvailableProtocolVersionForAppInfoList(Native Protocol.java:491)
com.facebook.internal.NativeProtocol.getLatestAvailableProtocolVersionForService(NativeProtocol.java:475)
com.facebook.internal.PlatformServiceClient.start(PlatformServiceClient.java:73)
                                                                                                                                             com.facebook.AuthorizationClient$GetTokenAuthHandler.tryAuthorize(AuthorizationClient.java:732)
com.facebook.AuthorizationClient.tryCurrentHandler(AuthorizationClient.java:268)
com.facebook.AuthorizationClient.continueAuth(AuthorizationClient.java:167)
com.facebook.AuthorizationClient.startOrContinueAuth(AuthorizationClient.java:136)
com.facebook.LoginActivity.onResume(LoginActivity.java:117)
android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1190)
android.app.Activity.performResume(Activity.java:5210)
android.app.ActivityThread.performResumeActivity(ActivityThread.java:2886)
android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2928)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1382)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5299)
java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)

编辑 - 当我调试代码时发现onSessionStatusCVhange方法经常以相同的状态打开并且每次打开新活动时被调用。 我给出异常的代码是 -

@Override
        protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.connect_fb_fragment);
    mContext = this;
    uiHelper = new UiLifecycleHelper(this, callback);
    uiHelper.onCreate(savedInstanceState);
    authButton = (LoginButton) findViewById(R.id.authButton);
    authButton.setReadPermissions(Arrays.asList("basic_info","email"));
    authButton.setBackgroundResource(R.drawable.register_with_facebook);
    authButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0,0);
    authButton.setText("");
}

@SuppressWarnings("deprecation")
private void onSessionStateChange(final Session session, SessionState state, Exception exception) {
    flag = true;
    if (state.isOpened()) {
        //if(!isFbDataReceived){
            accessToken = session.getAccessToken();
            accessExpir = session.getExpirationDate();
            Log.i(TAG, "Logged in...");

            if (state.isOpened()) {
                if(mDialog==null){
                    mDialog = new ProgressDialog(mContext);
                }
                if(!mDialog.isShowing()){
                    mDialog.setMessage("please wait...");
                    mDialog.setCancelable(false);
                    mDialog.show();
                }
                 Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                     public void onCompleted(GraphUser user, Response response) {
                          session.close();
                          getUserFacebookData(user);
                     }
                 });
             }
        //}
    }else if(state.equals(SessionState.CLOSED_LOGIN_FAILED)){
        //UtilMethod.showToast("Unable to connect to facebook,Please try again",context);
    }
    else if (state.isClosed()) {
        Log.i(TAG, "Logged out...");
    }
}

private Session.StatusCallback callback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
    }
};

@Override
public void onResume() {
    super.onResume();
    Session session = Session.getActiveSession();
    if(session != null &&
           (session.isOpened() || session.isClosed()) ) {
        onSessionStateChange(session, session.getState(), null);
    }
    else{
        if(flag){
            Session s = new Session(mContext);
            Session.setActiveSession(s);
            s.openForRead(new Session.OpenRequest(this).setCallback(callback).setPermissions(Arrays.asList("basic_info","email")));
        }
    }
    uiHelper.onResume();
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
  //  if(isLoginWithFb)
    uiHelper.onSaveInstanceState(outState);
}

0 个答案:

没有答案