【发布时间】:2016-01-23 00:09:27
【问题描述】:
场景: 我有四个编辑文本和三个按钮,其中,当用户在其中一个编辑文本中提供一些输入并单击按钮 1 或按钮 2 时,用户提供的输入应保存在与按钮 3 关联的活动中。一般来说,按钮 3 活动存储用户提供的输入的“历史”。
目前,我正在使用 sharedpreferences 方法,我知道如果您想存储多个值,这不是一个好方法。我曾尝试使用 SQLite 数据库解决此问题,但没有成功。
这是我在按钮 1 和按钮 2 的 onclick 方法中定义的名为“saveHistory”的方法。
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 方法关联的按钮,我只能获得一个值,因为只有一个列表视图。所以我的需要是我想使用 sharedpreferences 存储多个值,并且单击两个按钮应该保存值而不是覆盖彼此的值。我知道我的要求太多了,但如果您能帮助我了解如何正确使用此方案和此代码进行增量,那么我将不胜感激。
我已经处理了许多 stackoverflow 问题,其中大多数都与一个编辑文本和一个按钮以及存储和检索这些值有关。但是,我的应用程序要求不同,因此,我发布了这个问题。
【问题讨论】:
-
如果我对您的理解正确...只需在调用保存更改功能时检索以前的共享首选项即可。例如,检查 textview 是否包含一个字符串,然后才将其保存到首选项中。现在您设置新值和空值而不检查先前的值。确实一切都丢失了
-
为什么你不能尝试使用 sql Lite DB。这将非常有用。
标签: java android listview android-edittext sharedpreferences