Pjayness
Pjayness

Reputation: 365

Android: Storing ArrayList<T> in SharedPreferences?

I need to store an ArrayList of type "Comment" in my SharedPreferences. This is my model class:

public class Comment {

    public String getPID() {
        return PID;
    }
    public void setPID(String pID) {
        PID = pID;
    }
    public String PID;
    public String Comment;
    public String Commenter;
    public String Date;

    public String getComment() {
        return Comment;
    }
    public void setComment(String comment) {
        Comment = comment;
    }
    public String getCommenter() {
        return Commenter;
    }
    public void setCommenter(String commenter) {
        Commenter = commenter;
    }
    public String getDate() {
        return Date;
    }
    public void setDate(String date) {
        Date = date;
    }
}

So my ArrayList contains 2 Comments that need to be stored in SharedPreferences. I tried HashSet but it requires String values:

ArrayList<Comment_FB> fb = getFeedback(); //my Comments List

SharedPreferences pref = getApplicationContext().getSharedPreferences("CurrentProduct", 0);
Editor editor = pref.edit();
Set<String> set = new HashSet<String>();
set.addAll(fb);
editor.putStringSet("key", set);
editor.commit();

How do I get this done folks? :)

Upvotes: 2

Views: 280

Answers (1)

Ding Ke
Ding Ke

Reputation: 76

I think you need to store it as a file.

public static boolean save(String key, Serializable obj) {
    try {
        FileOutputStream outStream = new FileOutputStream(instance.getCacheDir() + "/" + key);
        ObjectOutputStream objOutStream;
        objOutStream = new ObjectOutputStream(outStream);
        objOutStream.writeObject(obj);
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }

    return true;
}


public static Object getObject(String key) {
    Object obj = null;
    if (!new File(instance.getCacheDir() + "/" + key).exists())
        return obj;
    FileInputStream inputStream;
    try {
        inputStream = new FileInputStream(instance.getCacheDir() + "/" + key);
        ObjectInputStream objInputStream = new ObjectInputStream(inputStream);
        obj = objInputStream.readObject();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    return obj;
}

Your "Comment" class should implements Serializable.

Upvotes: 1

Related Questions