SharedPreferences似乎不起作用

时间:2014-04-04 02:11:53

标签: android

以下是我的Contacts活动(我的主要活动):

public class Contacts extends Delegate {

    private static final String TAG = "Contacts";
    public View listContactsView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SharedPreferences prefs = getPreferences(MODE_PRIVATE);
        String restoredText = prefs.getString("token", null);

        if(restoredText == null)
        {
            Intent intent = new Intent(this, SignIn.class);
            startActivity(intent);
        }

        setContentView(R.layout.activity_contacts);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new ContactListFragment()).commit();
        }

        //new InEventAPI(this).execute("");
    }
    ...
    ...

以下是我的SignIn活动:

public SignIn extends Delegate {
    ...
    ...


    public void personSignInDelegate(HttpResponse response, JSONObject result)
    {
        if(response != null && result != null)
        {
            switch(response.getStatusLine().getStatusCode())
            {
            case 200:
                try {

                    SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
                    editor.putString("token", result.get("tokenID").toString());
                    editor.commit();

                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }               
                break;
            case 401:
                Toast.makeText(this, R.string.toastEmailPasswordIncorrect, Toast.LENGTH_LONG).show();
                break;
            }
        }
        else
        {
            Log.d(TAG, "Something went wrong!");
        }
    }

当我登录时,它会在SharedPreferences上提交,但当我关闭我的应用并重新打开时,String变为null,我的OnCreate意图{ {1}}再次。

我缺少什么?

为了避免疑惑,我的SignIn班级:

Delegate

1 个答案:

答案 0 :(得分:2)

问题最有可能是您使用getPreferences()。来自documentation

  

检索SharedPreferences对象以访问其中的首选项   私人参加此活动。这只是调用底层证券   通过传入此活动来获取getSharedPreferences(String,int)方法   类名作为首选项名称。

尽管两个类都扩展了Delegate类,但它们都是具有唯一名称的唯一类。这意味着getPreferences()中的Contacts会返回与SignIn相比不同的SharedPreferenceObject。

使用getSharedPreferences(String, int) 例如。 而不是

getPreferences(MODE_PRIVATE);

将其更改为

getSharedPreferences ("OneSharedPreference", MODE_PRIVATE);

或覆盖getPreferences()中的Delegate,以便使用唯一名称调用getSharedPreferences()

或者,如果您没有使用任何默认的SharedPreferences(这通常由任何PreferenceActivity类使用),您可以随时调用

PreferenceManager.getDefaultSharedPreferences()并传入Context个实例。