场景: 我有四个edittext和三个按钮,其中,当用户在其中一个edittext中提供某些输入并单击按钮1或按钮2时,提供的应该将用户输入保存在与按钮3相关联的活动中。通常,按钮3活动存储由用户提供的输入的“历史”。Android:使用SharedPreferences将多个EditText值存储到ListView中
目前,我使用的是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和一个按钮相关联,并存储和检索这些值。但是,我的申请要求不同,因此我发布了这个问题。
如果我正确理解您的意思,只需在调用thr save changes函数时检索先前的共享偏好即可。检查textview是否包含字符串,然后将其保存到首选项。现在,您可以在不检查以前的值的情况下设置新值和空值。并且确实丢失了一切 – Riddim
为什么不能用sql Lite DB来尝试。这将是非常有用的。 –