SharedPreferences总是在我现有的应用程序中获得默认值,但是在创建新应用程序时可以

问题描述:

SharedPreferences在一个现有应用程序中无法正常工作.我尝试了许多不同的方法,但仍然无法正常工作.始终使用默认值重新启动应用程序.

SharedPreferences doesn't work correct in one existing apps. I tried many different ways but still not working. Always get default values app start again.

  • 当我在创建的新应用中使用相同的代码时,它就可以正常工作.
  • 它正在使用所有其他现有应用程序.

你知道为什么吗?

    String default_user = "Default_User";
    SharedPreferences pref = this.getSharedPreferences("TEST_SHAREDPREF", MODE_PRIVATE);
    String user = pref.getString("user", default_user);
    Log.d("SHARED CHECK", user);
    if (user.equals(default_user)) {
        SharedPreferences.Editor edit = pref.edit();
        edit.putString("user", "new_user");
        boolean ok = edit.commit();
        user = pref.getString("user", default_user);
        Log.d("SHARED WRITE", user);
        Toast.makeText(this, user + " Save process: " + ok, Toast.LENGTH_LONG).show();
    } else {
        Log.d("SHARED READ", user);
        Toast.makeText(this, "READ SharedPrefs: " + user, Toast.LENGTH_LONG).show();
    }

编辑:记录结果

那个块总是返回这个错误的应用程序,我不知道为什么

that block always return this for which is incorrect app and I don't know why

    //first run
    SHARED CHECK Default_User
    SHARED WRITE new_user

    //each time after first
    SHARED CHECK Default_User
    SHARED WRITE new_user

该块始终返回所有应用程序

That block always return this for which are all apps

    //first run
    SHARED CHECK Default_User
    SHARED WRITE new_user

    //each time after first
    SHARED CHECK new_user
    SHARED READ new_user

最后,我解决了这个问题. 其他开发人员之一添加了一种方法. 此方法已删除data/data/packageName文件夹下的所有文件(libs文件夹除外). 我认为他们尝试删除缓存文件夹.

Finally I solved that problem. A method was added by one of other developers. All files under data/data/packageName folder except libs folder were being deleted by this method. I think they tried delete cache folder.

删除了此方法并解决了.

Removed this method and it solved.