【发布时间】:2016-05-16 19:09:47
【问题描述】:
private void SavePreferences(){
try
{
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
myScore = ((TextView)findViewById(R.id.score)).getText().toString();
myWord = ((TextView)findViewById(R.id.word)).getText().toString();
editor.putString("saveScore", myScore.toString());
editor.putString("saveWord", myWord.toString());
editor.commit();
}
catch (Exception e) {
System.err.println("scoreText or wordView are null " + e.getMessage());
}
}
private void LoadPreferences(){
try {
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
myScore = ((TextView)findViewById(R.id.score)).getText().toString();
myWord = ((TextView)findViewById(R.id.word)).getText().toString();
scoreText.setText(sharedPreferences.getString("saveScore", myScore.toString()));
wordView.setText(sharedPreferences.getString("saveWord", myWord.toString()));
}
catch (Exception e) {
System.err.println("scoreText or wordView are null " + e.getMessage());
}
}
scoretext 和 wordView 没有被分配来自 myScore 和 myWord 的值,尽管在调试时它们有一个值。
调试结果:
myScore:"990" scoreText :null
wordView: null myWord"_ _ a _ _"
编辑:
调用 savePreferences 的位置:
@Override
public void onBackPressed() {
SavePreferences();
super.onBackPressed();
}
调用加载首选项的位置:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game_avtivity);
LoadPreferences();
}
在 onBackPressed 中调用 loadPrefernces 以检查 myScore 或 myWord 是否为 null。
当从 onCreate 调用加载首选项时,将调用异常!
错误信息:
第一次调用消息时值仍然为空(预期异常),并且第二次调用该值不应为空(不预期异常)
05-13 17:23:06.671 31547-31547/mt.edu.mcast.guesstheword2 W/System.err:scoreText 或 wordView 为 null 尝试调用虚拟 方法 'void android.widget.TextView.setText(java.lang.CharSequence)' 在空对象引用上
【问题讨论】:
-
你的 loadPreferences 和 savePreferences 函数是从同一个活动中调用的吗?
-
为了能够调试,我在BackPressed 上创建了这两种方法。(检查 myScore 和 myWord 是否有值)。 Loadpreferences 应该在 onCreate 中实现,但是当插入到 onCreate 时,它会进入异常(scoreText 或 wordView 为空)。
-
从同一个 onBackPressed 函数调用?可以显示功能码吗?
-
在
onCreate()中,您正在加载尚未保存的首选项,因为您将它们保存在onBackPressed()中。你肯定会得到例外。 -
ofc 我第一次进入活动时会遇到异常,但第二次(当我退后,然后我再次打开活动时)它应该加载这些首选项。
标签: java android android-studio sharedpreferences