java - 在 Android 中使用 SharedPreferences 存储数据

标签 java android textview sharedpreferences

我是 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/

相关文章:

Android 错误 - 打开失败 ENOENT

java - 有什么办法可以用这种方式替换这段代码吗?

java - 从抽象类实现比较器

Java 8 功能接口(interface)歧义引用(这是一个错误吗?)

java - 使用 iText 的 PdfTextExtractor 解析错误

java - 如何在最终 TreeSet 中创建硬编码的不区分大小写值,以便仅将 "Banana"而不是 "banana"作为另一个值

Android xamarin visual studio 错误 : 'System.Configuration.dll'

android - Android-更改底部对话框的高度以容纳新文本

android - 重复的 ID 布局错误

java - 获取对不在默认 XML 布局中的 View 的 setText 访问权限