1

これが私のコードです:

    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 もクリアしようとしました: 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) {}
        });
  }

では、ここで質問です。どんなに頑張っても、sharedPreferences に格納されている値は変わりませんでした。clear()、remove()、commit()、apply() などを試しました.....助けてください!

4

1 に答える 1

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);
于 2012-09-04T22:04:30.817 に答える