共享首选项保存和检索数据

Posted

技术标签:

【中文标题】共享首选项保存和检索数据【英文标题】:Shared Preferences save and retrieve data 【发布时间】:2014-07-25 13:35:36 【问题描述】:

我正在使用共享首选项来保存来自 AutoCompleteTextView 的数据。 当用户在这个AutoCompleteTextView中写东西时,他可以点击一个按钮来保存他刚刚写的东西(这样他就不必每次都写了)。

我的代码如下所示:

private AutoCompleteTextView autoComplete = null;
String nameFile = "Web service data";
String myData = "";
SharedPreferences pref;
Editor editor;
String channel = "";
String[] valuesArray = channel;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main);

    pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
    editor = pref.edit();

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, valuesArray);
    autoComplete = (AutoCompleteTextView) findViewById(R.id.autocompletion);
    autoComplete.setAdapter(adapter);

    Button add = (Button) findViewById(R.id.add); 
    add.setOnClickListener(sendForm2);
    Button remove = (Button) findViewById(R.id.remove);
    remove.setOnClickListener(sendForm2);

    channel = pref.getString(nameFile, null);



OnClickListener sendForm2 = new OnClickListener() 
    public void onClick(View v) 
        switch (v.getId()) 
            case R.id.add:
                myData = autoComplete.getText().toString();
                editor.putString(nameFile, myData);
                editor.commit();
            break;

            case R.id.remove:
                editor.remove(nameFile);
                editor.commit();
            break;   
        
       
;

问题是,共享首选项根本不会在频道中保存任何数据。即使我关闭应用程序并重新启动它。 任何线索或想法如何解决这个问题?

【问题讨论】:

你怎么知道它没有保存? 因为在我按下按钮添加并重新启动应用程序后输入值不在 AutoCompleteTextView 中。我无法检索该值,好像尚未完成保存一样。 我看到你设置了[频道],但我没有看到你用它做任何事情。甚至不只是记录它以查看它是否为空 您在哪里从 SharedPrefernce 读取数据?另外据我所知,您正在用新输入的值覆盖最新值,因此不会有任何列表,只有一个值 “Channel”存储在 AutoCompleteTextView 中使用的数组“valuesArray”中。 【参考方案1】:

我会尝试的第一件事是添加一个

Log.d("OnCreate", "channel : "+ channel);

在onCreate之后

channel = pref.getString(nameFile, null);

看看你里面有没有东西。

如果你不这样做,这真的意味着 sharedpref 没有保存。

在这种情况下,我会尝试恢复:

pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
editor = pref.edit();

就在

之前
switch (v.getId()) 

我记得读到过,有时根据您对活动所做的操作,您创建的 sharedpref 编辑器可能会“丢失”,并且与代码中的任何内容都无关。

【讨论】:

谢谢,根据LogCat,频道确实是空的。 太好了,那就试试我的其他建议并告诉我们吧! 它导致应用程序崩溃,我会检查并纠正错误。【参考方案2】:

使用以下方法保存和检索字符串的优先级。

//通过key和data保存prefrence

public static void SavePrefrence(Context ctx, String Key, String value) 
    ctx.getSharedPreferences("mypref", ctx.MODE_PRIVATE)
            .edit().putString(Key, value).commit();

//通过传递你的密钥来获得优先权

public static String getPrefrence(Context ctx, String key) 
        SharedPreferences pref = ctx.getSharedPreferences(
                "mypref", ctx.MODE_PRIVATE);
        String result = pref.getString(key, null);
        return result;
    

【讨论】:

以上是关于共享首选项保存和检索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件共享首选项值保存到firebase并检索它

使用Gson从共享首选项中检索列表

在 Xamarin.Android 中将 Json 对象项中的错误值保存和检索到 IShared 首选项(始终返回注销值)

将 JWT 令牌存储在共享首选项中?并在整个应用程序中检索价值?

共享首选项中的单选按钮和微调器?

如何使用共享首选项让用户保持登录状态?