我是 Android 编程新手,以前从未涉足过保存值或设置。我看过Storage Options我尝试实现 SharedPreferences。从我的角度来看,当我创建一个新事件时,我告诉它提取一些数据,并将 TextView 设置为该值。然而它永远不会设置 TextView;我似乎无法弄清楚出了什么问题。
createEvent 这是我创建要存储的值的地方。
@Override
protected void onCreate(Bundle savedInstanceState) {
LayoutInflater inflater = this.getLayoutInflater();
final View vView = inflater.inflate(R.layout.fragment_main, null);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
SharedPreferences settings = getPreferences(0);
int iEventCounter = settings.getInt("eventCounter", 0);
if (iEventCounter > 0){
String eventName1 = settings.getString("event1Name", "Name of Event");
TextView eventLabelName = (TextView)vView.findViewById(R.id.section_label);
eventLabelName.setText(eventName1);
}
else if (iEventCounter == 0 || iEventCounter < 0){
TextView eventLabelName = (TextView)vView.findViewById(R.id.section_label);
eventLabelName.setText("There is no event stored in memory.");
}
}
eventAdd(这是我将数据提交到 SharedPreferences 的位置
public int eventAdd(String sName, String sDate) {
LayoutInflater inflater = this.getLayoutInflater();
final View vView = inflater.inflate(R.layout.fragment_main, null);
TextView eventLabelName = (TextView)vView.findViewById(R.id.testTextView);
eventLabelName.setText("test"); //Never changes
SharedPreferences settings = getPreferences(0); //Create SharedPreferences
SharedPreferences.Editor editor = settings.edit(); //Create editor
iEventCounter = settings.getInt("eventCounter", 0);
iEventCounter = iEventCounter+1;
editor.putInt("eventCounter", iEventCounter); //Put values for first Event into SharedPreferences
editor.putString("event1Name", sName);
editor.putString("event1Date", sDate);
// Commit the edits!
editor.commit();
//Change Label based on number of Events thus far.
if (iEventCounter > 0){
String eventName1 = settings.getString("event1Name", "Name of Event");
eventLabelName.setText(eventName1);
}
else if (iEventCounter == 0 || iEventCounter < 0){
eventLabelName.setText("There is no event stored in memory.");
}
return iEventCounter;
//eventLabelName.setText(iEventCounter); Doesn't do anything, doesn't change Text.
}
我没有收到错误,应用程序没有崩溃,只是不起作用。有人能看出这里有什么问题吗?任何帮助将不胜感激。
最佳答案
您正在膨胀 View ,但未将其设置为 Activity 的内容。所以您看不到任何变化。
final View vView = inflater.inflate(R.layout.fragment_main, null);
setContentView(R.layout.activity_main);
也许你应该使用;
setContentView(mView);
或者,如果您想将 activity_main
设置为 Activity 的内容,请进行更改;
vView.findViewById
到
findViewById
尝试重构您的代码。有一些不必要的代码。
关于java - 在 Android 中使用 SharedPreferences 存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20025462/