在Android应用程序中,我有列表视图,您可以在其中添加新对象,每个对象'有4-5个字符串值。 我不敢预测任何人都可以在app中使用更多3或4个这样的对象。
至于现在它在数据库,SQLite,一个对象=一个记录,4-5个值(TEXT类型),但它越来越难维护,我认为它添加到应用程序迂回。
可以通过共享偏好完成吗?或者存储这些数据不是一个好主意? 关键和价值怎么样,我可以去做它们吗?
答案 0 :(得分:1)
您需要Gson将对象放入共享首选项中。您可以找到here以及如何将其添加到项目中,例如this。不要忘记在gradle文件'build.gradle'SharedPreferences preferences = getSharedPreferences("name", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
Gson gson = new Gson();
String serializedObj = gson.toJson(ObjectHere);
editor.putString("key", serializedObj);
editor.commit();
中添加依赖项。
要将对象放入“共享首选项”,请使用以下命令:
SharedPreferences preferences = getSharedPreferences("name", MODE_PRIVATE);
Gson gson = new Gson();
String serializedObj = preferences.getString("key", "DEFAULT");
ObjectType object = gson.fromJson(serializedObj, Object.class);
要稍后检索数据,请执行以下操作
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="edittext_width">70</integer>
<integer name="edittext_height">30</integer>
</resources>
答案 1 :(得分:0)
您可以将数据写为文件,并在需要时使用文件名检索:
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
如果你在后台线程中执行此任务会更好,例如AsyncTask。
答案 2 :(得分:0)
可以使用gson(https://github.com/google/gson)来解决。只需在gradle依赖项部分添加compile files ('libs/gson-2.2.4.jar')
。
假设您使用的是Arraylist
class YOUR_CLASS
对于listview。即
private ArrayList<YOUR_CLASS> arraylist = new ArrayList<YOUR_CLASS>();
现在,在将项目对象添加到arraylist
后,您可以使用以下方式将其保存在共享首选项中:
SharedPreferences preferences = getSharedPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
Gson gson = new Gson();
String arraylist_in_string = gson.toJson(arraylist).toString(); //Converting it to String
editor.putString("YOUR_KEY", arraylist_in_string); //now saving the String
editor.commit();
现在,当您需要使用arraylist
时,您可以使用
Gson gson = new Gson();
String arraylist_in_string = preferences.getString("YOUR_KEY", null);
if(arraylist_in_string != null) //if we have list saved
{
//creating a list of YOUR_CLASS from the string response
Type type = new TypeToken<ArrayList<YOUR_CLASS>>() {}.getType();
List<YOUR_CLASS> list = new Gson().fromJson(arraylist_in_string, type);
//now adding the list to your arraylist
if (list != null && list.size() > 0 )) {
arraylist.clear();// before clearing check if its not null.
arraylist.addAll(list);
}else //ie list isn't saved yet
{
//You may want to save the arraylist into Shared preference using previous method
}
答案 3 :(得分:-1)
您可以随时添加,更新或删除共享偏好设置,如果您使用共享偏好设置会更容易。
/ *******创建SharedPreferences ******* /
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
Editor editor = pref.edit();
/ ****************将数据存储为KEY / VALUE对******************* /
editor.putBoolean("key_name1", true); // Saving boolean - true/false
editor.putInt("key_name2", "int value"); // Saving integer
editor.putFloat("key_name3", "float value"); // Saving float
editor.putLong("key_name4", "long value"); // Saving long
editor.putString("key_name5", "string value"); // Saving string
// Save the changes in SharedPreferences
editor.commit(); // commit changes
/ ****************获取SharedPreferences数据******************* /
//如果key的值不存在则返回第二个参数值 - 在这种情况下为null
pref.getBoolean("key_name1", null); // getting boolean
pref.getInt("key_name2", null); // getting Integer
pref.getFloat("key_name3", null); // getting Float
pref.getLong("key_name4", null); // getting Long
pref.getString("key_name5", null); // getting String
/ ************从SharedPreferences中删除键值***************** /
editor.remove("key_name3"); // will delete key key_name3
editor.remove("key_name4"); // will delete key key_name4
// Save the changes in SharedPreferences
editor.commit(); // commit changes
/ ************清除SharedPreferences中的所有数据***************** /
editor.clear();
editor.commit(); // commit changes