【问题标题】:Integer Shared preference allways returns 0整数共享偏好总是返回 0
【发布时间】:2018-09-07 16:22:35
【问题描述】:

我正在尝试编写一个简单的密码检查来保护我的应用程序的设置。密码应保存在共享首选项中。当 sharedPreference 返回零时,主调用 setPassword。这是为了确保在有人第一次尝试输入设置时设置密码。然后 setPassword 应该设置一个密码并将其保存在 sharedPreference 中。但是在检查是否设置了密码时,sharedPreference 总是返回 0。

这是我的主要内容:

final Intent intentSetPasswords = new Intent(this, SetPasswordActivity.class);
    final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    passwordToCheck = sharedPreferences.getInt("PASSWORDSETTINGS", 0);

    //setting button on click listener
    buttonSetings.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //check if a password was set muss Überarbeitet werden
            passwordToCheck = sharedPreferences.getInt("PASSWORDSETTINGS", 0);
            Log.e("password", ""+ passwordToCheck);
            if(passwordToCheck==0){
                startActivity(intentSetPasswords);
            }else{
                startActivity(new Intent(MainActivity.this, PasswordCheckActivity.class));
            }
        }
    });

这是我的setPassword:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_set_password);

    final Intent intentSettings = new Intent(this, SettingsActivity.class);


    buttonSetPassword = (Button)findViewById(R.id.buttonSetPassword);
    textViewSetPassword = (TextView)findViewById(R.id.textViewSetPasswordText);
    editTextPassword = (EditText)findViewById(R.id.passwordNumericSettingsSetPassword);
    final Intent intent = new Intent(this, MainActivity.class);
    buttonSetPassword.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            counterButton++;
            switch (counterButton){
                case 1:
                    password = editTextPassword.getText().toString();
                    if (password.length() == 4){
                        Log.d("First Password", "taken");
                        buttonSetPassword.setText("Confirm Password!");
                        editTextPassword.setText("");
                    }else{
                        Log.d("First Password", "not taken");
                        textViewSetPassword.setText("The Password must be\nfour numbers long!");
                        password = "";
                        editTextPassword.setText("");
                        counterButton=0;
                    }
                    break;
                case 2:
                    passwordToConfirm = editTextPassword.getText().toString();
                    if (Integer.parseInt(passwordToConfirm)  == Integer.parseInt(password)){

                        Log.e("password", password);
                        Log.e("passwordToConfirm", passwordToConfirm);
                        SharedPreferences sharedPreferences = getSharedPreferences("PASSWORDS", 0);
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.putInt("PASSWORDSETTINGS", Integer.parseInt(password));
                        editor.commit();
                        startActivity(intentSettings);
                        finish();
                    }else{
                        textViewSetPassword.setText("The passwords aren't the same!\nTry again!");
                        buttonSetPassword.setText("Set Password");
                        editTextPassword.setText("");
                        passwordToConfirm = "";
                        password = "";
                        counterButton = 0;
                        startActivity(intent);
                    }
                    break;
            }
        }
    });
}

我猜 sharedPreference 有问题,但我不明白。

【问题讨论】:

  • 你想要什么不清楚。如果在返回默认值之前未设置共享首选项值。在您的情况下,默认值为零。 getInt()的第二个参数sharedPreferences.getInt("PASSWORDSETTINGS", 0)是默认值。
  • 好的,为什么即使设置了密码,它仍然返回 0?在 setPassword 中是写入共享首选项的值。但设置密码后,sharedPreference 仍然返回零。

标签: android passwords sharedpreferences


【解决方案1】:

轻松使用下面的库来管理数据

https://github.com/orhanobut/hawk

【讨论】:

    【解决方案2】:

    首先,检查counterButton的值并确保case 2 branch被执行。 其次,用于设置的sharedPreferences 和用于获取的sharedPreferences 应该相同。你可以这样做:

    private final static String MyPREFERENCES = "MyPrefs"; //define two class fields
    private SharedPreferences mSharedPreferences;
    
    mSharedPreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);//in activity Oncreate() methods. 
    
    
    //and set or get in other place as you want.
    

    【讨论】:

      【解决方案3】:

      首先你会得到这样的共享首选项

      final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
      

      稍后设置密码时,如下所示

      SharedPreferences sharedPreferences = getSharedPreferences("PASSWORDS", 0);
      

      它们是两种不同的共享偏好。使用第一个共享首选项。 欲了解更多信息,请参阅此页面https://developer.android.com/training/data-storage/shared-preferences

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-25
        • 1970-01-01
        • 2014-07-29
        • 2019-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多