[英]Storing Data with SharedPreferences in Android
I'm new to Android programming and I've never dabbled in saving values or settings before. 我是Android编程的新手,我以前从未考虑过保存值或设置。 I've taken a look at Storage Options and I've tried to Implement SharedPreferences.
我已经看了存储选项 ,我试图实现SharedPreferences。 And from my point of view, when I create a new event, I tell it to pull some data, and set a TextView to the value.
从我的角度来看,当我创建一个新事件时,我告诉它提取一些数据,然后将TextView设置为该值。 However it never sets the TextView;
但它永远不会设置TextView; and I can't seem to figure out what is wrong.
我似乎无法弄清楚出了什么问题。
createEvent This is where I'm creating the values I want to stored. 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 (Here is where I commit data to SharedPreferences 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.
}
I don't get an error, the app doesn't crash, it just doesn't work. 我没有收到错误,应用程序没有崩溃,它只是不起作用。 Can anyone see anything wrong here?
谁能在这里看到任何错误? Any help would be greatly appreciated.
任何帮助将不胜感激。
You are inflating a view but not setting it to activity's content. 您正在给视图充气但不将其设置为活动的内容。 So you don't see any change .
所以你没有看到任何变化。
final View vView = inflater.inflate(R.layout.fragment_main, null);
setContentView(R.layout.activity_main);
Maybe you should use; 也许你应该使用;
setContentView(mView);
Or if you want to set activity_main
to your activity's content, change; 或者,如果您想将
activity_main
设置为活动的内容,请更改;
vView.findViewById
to 至
findViewById
Try to refactor your code. 尝试重构您的代码。 There are some unnecessary codes.
有一些不必要的代码。
Try changing 尝试改变
SharedPreferences settings = getPreferences(0);
in both methods to 在两种方法中
SharedPreferences settings = getSharedPreferences("preferenceName", 0);
Your code is kinda strange at some points. 你的代码在某些方面有点奇怪。
In the first place, you could turn this code 首先,您可以转换此代码
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.");
}
into the next one: 进入下一个:
SharedPreferences settings = getSharedPreferences("preferences", MODE_PRIVATE); //Always use the name of the variable to know its meaning.
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 { // We know what the other cases are, more readable
TextView eventLabelName = (TextView)vView.findViewById(R.id.section_label);
eventLabelName.setText("There is no event stored in memory.");
}
and this other piece: 而这另一件:
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.");
into this piece: 进入这件作品:
SharedPreferences settings = getSharedPreferences("preferences", MODE_PRIVATE); //Same as before
iEventCounter = settings.getInt("eventCounter", 0); // We first get the value, then we edit
SharedPreferences.Editor editor = settings.edit(); //Create editor
editor.putInt("eventCounter", ++iEventCounter); //Pre-increment first increments the variable value then does whatever you wanted to.
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 { // Same as before
eventLabelName.setText("There is no event stored in memory.");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.