简体   繁体   English

Android Facebook sdk,sharedPreferences永不改变吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM