存储ListView数据的共享首选项

时间:2016-02-29 07:05:05

标签: java android

在Android应用程序中,我有列表视图,您可以在其中添加新对象,每个对象'有4-5个字符串值。 我不敢预测任何人都可以在app中使用更多3或4个这样的对象。

至于现在它在数据库,SQLite,一个对象=一个记录,4-5个值(TEXT类型),但它越来越难维护,我认为它添加到应用程序迂回。

可以通过共享偏好完成吗?或者存储这些数据不是一个好主意? 关键和价值怎么样,我可以去做它们吗?

4 个答案:

答案 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时,您可以使用

从sharedPreferences中获取它
     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