[英]Android Facebook sdk, the sharedPreferences never change?
Here is my code: 这是我的代码:
mPrefs = getSharedPreferences("facebook_session",MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if(access_token != null) {
facebook.setAccessToken(access_token);
Log.i("access_token","facebook.setAccessToken(access_token), and access_token=="+access_token);
}
if(expires != 0) {
Log.i("expires","facebook.setAccessToken(access_token), and expires=="+expires);
facebook.setAccessExpires(expires);
}
/*
* Only call authorize if the access_token has expired.
*/
if(!facebook.isSessionValid()) {
Log.v("in !facebook.isSessionValid()", "no pref");
facebook.authorize( this, new String[] { "email", "publish_checkins" }, new DialogListener(){
@Override
public void onComplete(Bundle values) {
Log.v("facebook.authorize", "no pref");
Log.v("postToWall","mFacebook.getAccessToken(): "+facebook.getAccessToken());
Log.v("postToWall","mFacebook.getAccessExpires(): "+facebook.getAccessExpires());
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", facebook.getAccessToken());
editor.putLong("access_expires", facebook.getAccessExpires());
editor.commit();
}
@Override
public void onFacebookError(FacebookError e) {
Log.v("facebook.authorize","mFacebook.onFacebookError(): "+e);
}
@Override
public void onError(DialogError e) {
Log.v("facebook.authorize","mFacebook.onFacebookError(): "+e);
Log.v("facebook.authorize","mFacebook.onError(): "+facebook.getAccessToken());
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(),
"You must be registered and signed in to perform that action",
Toast.LENGTH_LONG).show();
finish();
// onCancel, leaving the app
}
});
}//end of pref check
and in the logout function, I tried to logout form facebook and clear the sharedPreferences as well: public void Logout(View view){ 在登出功能中,我尝试从Facebook登出并清除sharedPreferences:public void Logout(View view){
String access_token = mPrefs.getString("access_token", null);
Log.i("access_token","mPrefs.getString(access_token, null), and access_token=="+access_token);
SharedPreferences.Editor editor = mPrefs.edit();
editor.remove("access_token");
editor.remove("access_expires");
editor.commit();
Log.i("access_token","mPrefs.getString(access_token, null), and access_token=="+access_token);
mAsyncRunner = new AsyncFacebookRunner(facebook); // initialize AsyncRunner, make sure it's not null
mAsyncRunner.logout(Login.this, new RequestListener() {
@Override
public void onComplete(String response, Object state) {
finish();
}
@Override
public void onIOException(IOException e, Object state) {}
@Override
public void onFileNotFoundException(FileNotFoundException e,
Object state) {}
@Override
public void onMalformedURLException(MalformedURLException e,
Object state) {}
@Override
public void onFacebookError(FacebookError e, Object state) {}
});
}
So, here is the question: No matter how hard I try, the values stored in sharedPreferences didn't change. 因此,这是一个问题:无论我怎么努力,存储在sharedPreferences中的值都不会改变。 I tried clear(), remove(), commit(), apply() etc..... Please help!
我尝试了clear(),remove(),commit(),apply()等。...请帮助!
Log.i("access_token","mPrefs.getString(access_token, null), and access_token=="+access_token);
If you are using this Log
statement to verify whether the values stored in SharedPreferences
are cleared or not, you are not doing it correctly. 如果使用此
Log
语句来验证是否清除了SharedPreferences
中存储的值,则说明操作不正确。
Your value access_token
was assigned a value before you removed it, so when you reference the variable it will still retain that value. 您的值
access_token
在删除之前已分配了一个值,因此,当您引用该变量时,它仍将保留该值。 To correctly test whether the value has been removed from SharedPreferences
, you need to try accessing that value again after you've removed it by doing the following after your editor.commit()
command: 为了正确测试该值是否已从
SharedPreferences
删除,您需要在 editor.commit()
命令之后执行以下操作,以尝试在删除该值之后再次访问该值:
String access_token_2 = mPrefs.getString("access_token", null);
Log.i("access_token", "access_token from SharedPreferences is now " + access_token_2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.