android - 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 应用程序),但我不知道它是什么。
解决方案
推荐阅读
- python - 树莓派 MYSQL 数据库异常
- regex - 匹配字符串中的任何字符
- jquery - ajax jquery选项卡中的数据表
- visual-studio-code - vscode 扩展在哪里存储登录信息?
- java - Thymeleaf 3 和 Spring Boot 2.1 的模板解析错误
- xml - 字符实体转换为 chr
- spring-boot - Java + Cloudflare + 相互身份验证
- sqlite - 在 perl 中关闭 AutoCommit 调用 SELECT 语句时,SQLite 是否执行磁盘活动?
- c# - 带有 WHERE 条件的 XElement LINQ 失败
- javascript - 使用jquery将fadeIn更改为幻灯片