首页 > 解决方案 > Android SharedPreferences 数据没有被保存(或者我没有正确检索它)?

问题描述

我正在尝试保存用户输入到 SharedPreferences 文件中的两个不同数字(一个称为 Rider Number,另一个是 Pillion Number)。当我点击我的保存按钮,然后退出此屏幕并返回时,我在第一个和第二个字段中都获得了第二个数字。

所以我添加了一堆日志来查看它可能出错的地方,据我所知,没有任何东西被保存到 SharedPreferences 中。更奇怪的是,当我在退出后加载应用程序时,EditText 框都显示第二个值,所以它必须保存在某个地方。

应用程序设置.xml:

public class appSettings extends AppCompatActivity {

    SharedPreferences sharedpreferences;
    public static final String tohPreferences = "Tour of Honor Preferences";
    public static final String riderNum = "000";
    public static final String pillionNum = "000";
    String riderNumToH = "000";
    String pillionNumToH = "000";

    String myEmailAddress = "me@example.com";
    String appVersionName;
    String jsonVersionName = "JSON 2019";
    private TextView versionDisplay;
    Button btnSendAppFeedback;
    EditText fieldRiderNumber;
    EditText fieldPillionNumber;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_app_settings);
        // my_child_toolbar is defined in the layout file
        Toolbar myChildToolbar =
                (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(myChildToolbar);

        // Get a support ActionBar corresponding to this toolbar
        ActionBar ab = getSupportActionBar();

        // Set the version number display
        getVersionName();

        // Enable the buttons
        btnSendAppFeedback = findViewById(R.id.btnSendAppFeedback);
        btnSendAppFeedback.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dispatchAppFeedbackIntent();
            }
        });

        Log.e("appSettings", "Initial Values: " + riderNumToH + " / " + pillionNumToH);
        fieldRiderNumber = findViewById(R.id.fieldRiderNumber);
        fieldPillionNumber = findViewById(R.id.fieldPillionNumber);
        sharedpreferences = getSharedPreferences(tohPreferences,
                Context.MODE_PRIVATE);
        if (sharedpreferences.contains(riderNum)) {
            Log.e("appSettings","riderNum set to " + riderNum);
            fieldRiderNumber.setText(sharedpreferences.getString(riderNum, ""));
        } else {
            Log.e("appSettings","riderNum Failed");
        }
        if (sharedpreferences.contains(pillionNum)) {
            Log.e("appSettings","pillionNum set to " + pillionNum);
            fieldPillionNumber.setText(sharedpreferences.getString(pillionNum, ""));
        } else {
            Log.e("appSettings","pillionNum Failed");
        }

    }

    public void saveRiderInfo(View view) {
        riderNumToH = fieldRiderNumber.getText().toString();
        pillionNumToH = fieldPillionNumber.getText().toString();
        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString(riderNum, riderNumToH);
        editor.putString(pillionNum, pillionNumToH);
        editor.commit();
        Log.e("appSettings","Screen Values " + riderNumToH + " / " + pillionNumToH);
        Log.e("appSettings","Retrieved Values: " + riderNum + " / " + pillionNum);
        Snackbar.make(findViewById(R.id.appSettingsView), R.string.resultsSettingsSaved,
                Snackbar.LENGTH_SHORT)
                .show();
    }

    private String getVersionName() {

        appVersionName = BuildConfig.VERSION_NAME;
        versionDisplay = findViewById(R.id.lblAppVersionInfo);
        versionDisplay.setText("Version " + appVersionName + " | " + jsonVersionName);
        return appVersionName;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.toolbar, menu);
        return true;
    }

    /**
     * Submits the bonus images via email.
     */
    private void dispatchAppFeedbackIntent() {
        Intent sendEmailIntent = new Intent(Intent.ACTION_SEND);
        sendEmailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        sendEmailIntent.setType("plain/text");
        sendEmailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{myEmailAddress});
        sendEmailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "TOH Feedback from Rider " + riderNumToH);
        sendEmailIntent.putExtra(Intent.EXTRA_TEXT, "\n\nSent from TOH App\nAndroid Version " + appVersionName);
        this.startActivity(Intent.createChooser(sendEmailIntent, "Sending email..."));
    }
}

上述代码的 Logcat 输出:

E/appSettings: Initial Values: 000 / 000
E/appSettings: riderNum set to 000
E/appSettings: pillionNum set to 000
E/appSettings: Screen Values 123 / 987
E/appSettings: Retrieved Values: 000 / 000
E/appSettings: Initial Values: 000 / 000
E/appSettings: riderNum set to 000
E/appSettings: pillionNum set to 000

我已经数不清有多少次我确认我没有不小心混淆了我的骑手和后座变量,但我还没有找到。我确定我缺少一些基本的东西(这是我的第一个 Android 应用程序),但我不知道它是什么。

标签: android

解决方案


推荐阅读