SharedPrefs无法正常工作

时间:2016-02-06 21:37:25

标签: android sharedpreferences

我试图使用像UserKeyID这样的应用程序制作应用程序,这是在第一次应用程序启动时生成的随机数,应该使用SharedPreferences保存在手机内存中。一切正常,直到SharedPrefs中保存了数字,因为它没有发生。我知道手机正在生成数字,它甚至使用我想在SharedPrefs中保存的相同变量将其发送到我的数据库。
我的代码看起来像那个 SplashScreen(生成数字的位置,发送到数据库并应保存在SPref中):

    @Override
    protected void onCreate(Bundle savedInstanceState) { ...
            context = getApplicationContext();
            sharedPref = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
            if (sharedPref.getBoolean("firstrun", true)) {
                new GetAllUsers().execute();
            }
<...> AsyncTask
            do {
                KeyID = rand.nextInt(999999 - 99999) + 99999;
                Log.d("KeyID : ", KeyID + "");
                isUnique = true;
                for(int i = 0; i < Ids.length; i++) {
                    if((KeyID + "").contains(Ids[i]))
                        isUnique = false;
                }
            } while(isUnique == false);
            return null;
        }

        protected void onPostExecute(String file_url) {
            sharedPref.edit().putString("KeyID", KeyID + "").commit();
            new AddNewUser().execute();
            sharedPref.edit().putBoolean("firstrun", false).commit();
            Intent i = new Intent(SplashScreen.this, FragmentsActivity.class);
            startActivity(i);
            finish();
        }

就像我说的那样,数字KeyID会按原样发送到数据库,但我无法从其他活动中访问它:

        sharedPref = SplashScreen.context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
        if(commentUsers[position].equals(sharedPref.getString("UserKeyID", "")) != true) {
            deleteComment.setVisibility(View.GONE);
        }

1 个答案:

答案 0 :(得分:3)

那是因为你使用了2个不同的键。保存在:

"UserKeyID"

并使用

进行检索
public static final KEY_USER_ID = "user_id";

这就是为什么常量应该用于键的确切原因,例如。

sharedPref.edit().putString(KEY_USER_ID, KeyID + "").commit();

然后,而不是硬编码字符串,只需使用常量。在你的情况下拼错/使用错误的密钥等时,你永远不会遇到这种情况:

if(commentUsers[position].equals(sharedPref.getString(KEY_USER_ID, "")) != true) {
    deleteComment.setVisibility(View.GONE);
}    

以后:

PHP