繁体   English   中英

Android:使用SharedPreferences将多个EditText值存储到ListView

[英]Android: Storing multiple EditText values to a ListView using SharedPreferences

场景:我有四个编辑文本和三个按钮,其中,当用户在其中一个编辑文本中提供某些输入并单击按钮1或按钮2时,用户提供的输入应保存在与按钮3关联的活动中通常,按钮3活动存储用户提供的输入的“历史记录”。

当前,我正在使用sharedpreferences方法,我知道如果要存储多个值,这不是一个好方法。 我尝试使用SQLite数据库解决此问题,但未成功。

这是我的方法“ saveHistory”,它在按钮1和按钮2的onclick方法中定义。

private void saveHistory()
    {
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        fd=sharedPreferences.edit();

    String et1 = et1.getText().toString();
    String et2 = et2.getText().toString();
    String et3 = et3.getText().toString();
    String et4 = et4.getText().toString();

    fd.putString("et1" , et1);
    fd.putString("et2" , et2);
    fd.putString("et3" , et3);
    fd.putString("et4" , et4);

    fd.apply();
}  

这是我的另一个类(单击按钮3时将调用该类),它检索edittexts值。

public class history extends Activity
{
    public static final String DEFAULT = "No data";
    ListView listView; 
    SharedPreferences sharedPreferences; 
    SharedPreferences.Editor sp; 
    public ArrayAdapter<String> adapter; 

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listview);

    listView = (ListView) findViewById(R.id.listViewMain);

    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    sp = sharedPreferences.edit();

    String et1 = sharedPreferences.getString("et1", DEFAULT);
    String et2 = sharedPreferences.getString("et2", DEFAULT);
    String et3 = sharedPreferences.getString("et3", DEFAULT);
    String et4 = sharedPreferences.getString("et4", DEFAULT);

    if (et1.equals(DEFAULT) || et2.equals(DEFAULT) || et3.equals(DEFAULT) || et4.equals(DEFAULT)) 
    {
        Toast.makeText(this, "No history found", Toast.LENGTH_LONG).show();
    }
    else
    {
        String [] values = new String[]{et1,et2,et3,et4};
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, values);
        listView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        sp.apply();
    }
}
}

我面临的问题是,我只看到一个列表视图,仅显示1个值,这很明显,因为没有代码可以递增。 当我输入新值时,旧值将被覆盖。 由于有两个与saveHistory方法关联的按钮,我只能得到一个值,因为只有一个listview。 因此,我的需求是我想使用sharedpreferences存储多个值,并且同时单击两个按钮都应保存这些值,而不要覆盖彼此的值。 我知道我要的太多了,但是如果您能帮助我找出如何在这种情况下和在此代码下正确进行增量,那么我将不胜感激。

我经历了许多stackoverflow问题,其中大多数与拥有一个edittext和一个按钮以及存储和检索这些值有关。 但是,我的申请要求不同,因此,我发布了这个问题。

您正在检索EditTexts值,但在您的sharedPreferences中放入了其他内容。

用以下代码替换您的saveHistory()代码:

private void saveHistory(){
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    fd = sharedPreferences.edit();

    String bt = et1.getText().toString();
    String an = et2.getText().toString();
    String cn = et3.getText().toString();
    String in = et4.getText().toString();

    fd.putString("et1" , bt); //These lines were the problem
    fd.putString("et2" , an); //These lines were the problem
    fd.putString("et3" , cn); //These lines were the problem
    fd.putString("et4" , in); //These lines were the problem

    fd.apply();
}

编辑 :对不起,我想我现在已经理解了你的问题。

您可以使用PutStringSet()使用单个SharedPreferences键存储多个String值。 您需要验证哪个按钮正在调用saveHistory(),然后使用此信息创建一个Set

请查看下面的链接以获取示例。

https://stackoverflow.com/a/9054240/2503185

在您的情况下,您可以输入以下内容(对于每个EditText值):

Set<String> faveSet = faves.getStringSet("et1");
faveSet.add(button + ":" + et1_value);
SharedPreferences.Editor editor = faves.edit();
editor.putStringSet("et1", faveSet);
editor.commit();

然后检索并验证每个EditText。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM