当我在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);
}