2012-09-03 55 views
1

这里是我的代码:Android Facebook sdk,sharedPreferences永远不会改变?

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 

,并在注销功能,我想注销表单Facebook和清除sharedPreferences还有: 公共无效注销(查看视图){

 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) {} 
     }); 
    } 

所以,这里是一个问题:不管我多么努力,存储在sharedPreferences中的值都没有改变。我尝试清除(),删除(),提交(),应用()等..... 请帮助!

+0

谢谢你提醒我 – crystalWing

+0

请人帮帮我!! – crystalWing

回答

0
Log.i("access_token","mPrefs.getString(access_token, null), and access_token=="+access_token); 

如果您正在使用此Log语句以验证存储在SharedPreferences值是否被清除或没有,你是不是做正确。

在您删除它之前,您的值access_token被分配了一个值,因此当您引用该变量时,它仍将保留该值。要正确测试是否值已从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); 
相关问题