如何在Android中保存自定义Java对象?

时间:2015-04-15 08:39:24

标签: java android json save

你能救我吗?我正在尝试将我的Java对象(客户)保存在android中,目前我正在学习一本书。

这就是我得到的,我有Customer对象,它有一个String和UUID。通过这些,我可以通过使用JSON转换它来成功保存它们。我的问题是我想为每个Customer添加一个包含(Double和两个字符串)的Objects的ArrayList。当我将Customer对象转换为json时,如何保存此ArrayList并在该JSON对象中检索它。

我研究过但不能很好地理解它。我找到了GSON,但我不确定这是否是我需要的,不知道如何将这个库添加到我的项目中。另一个是我可以将JSONArray放入JSON对象吗?这些是我发现的两种可能的解决方案但不确定。我试图通过文件而不是SQLite来保存它。反正有吗?

以下是Customer类的代码

    public class Customer {

//Constants for JSON
private static final String JSON_ID = "id";
private static final String JSON_NAME = "name";

private String mName;
private UUID mID;
private ArrayList<Item> mItems;

public Customer(){
    mID = UUID.randomUUID();
    mItems = new ArrayList<Item>();
}

//Loading Customer from JSON
public Customer(JSONObject jsonObject) throws JSONException{
    mID = UUID.fromString(jsonObject.getString(JSON_ID));
    if(jsonObject.has(JSON_NAME)){
        mName = jsonObject.getString(JSON_NAME);
    }
}


//JSON converter
public JSONObject toJSON() throws JSONException{
    JSONObject json = new JSONObject();
    json.put(JSON_ID, mID.toString());
    json.put(JSON_NAME,mName);
    if (!mItems.isEmpty()){

    }
    return json;
}


public UUID getmID() {
    return mID;
}

public String getmName() {
    return mName;
}

public void setmName(String mName) {
    this.mName = mName;
}

//Add item debt
public void addDebt(Item i){
    mItems.add(i);
}

//Get List Debt
public ArrayList<Item> getmItems(){
    return mItems;
}

public Item getItem(UUID id){
    for (Item item : mItems){
        if (item.getmItemID().equals(id)){
            return item;
        }
    }
    return null;
}

}

这是项目

   public class Item {

private String mItemName;
private Date mDate;
private UUID mItemID;
private double mPrice;


public Item(){
    mDate = new Date();
    mItemID = UUID.randomUUID();
}

public UUID getmItemID() {
    return mItemID;
}

public void setmItemID(UUID mItemID) {
    this.mItemID = mItemID;
}

public String getmItemName() {
    return mItemName;
}

public void setmItemName(String mItemName) {
    this.mItemName = mItemName;
}

public String toString(){
    return mItemName;
}

public Date getmDate() {
    return mDate;
}

public void setmDate(Date mDate) {
    this.mDate = mDate;
}

public double getmPrice() {
    return mPrice;
}

public void setmPrice(double mPrice) {
    this.mPrice = mPrice;
}

}

2 个答案:

答案 0 :(得分:3)

您可以执行以下操作将整个对象(包括ArrayList)转换为json,然后将其保存到SharedPreferences

为此,您需要导入GSON库。这是你如何做到的。

如果您正在使用Android Studio

  • 转到build.gradle文件并将其打开
  • 向下滚动,直至看到dependencies
  • 添加以下行并同步项目(选项将显示在屏幕顶部compile 'com.google.code.gson:gson:2.3.1'

如果您正在使用Eclipse

  • Download gson jar
  • 右键单击您的项目并选择属性
  • 选择&#34; Java Build Path&#34;在左边,然后是&#34;图书馆&#34;标签。现在,点击&#34;添加外部JARS ...&#34;按钮
  • 找到并选择刚刚下载的jar文件,然后点击&#34;打开&#34;
  • 最后点击&#34; ok&#34;你应该能够在引用的库下看到它

现在代码看起来像这样

SharedPreferences mSettings = getSharedPreferences("YourPreferenceName", Context.MODE_PRIVATE);
SharedPreferences.Editor mEditor = mSettings.edit();

GsonBuilder gsonb = new GsonBuilder();
Gson mGson = gsonb.create();

让我们假设您有2种用于保存对象的方法和一种用于阅读它的方法。

public boolean writeJSON(Customer c, String yourSettingName)
{
   try {
       String writeValue = mGson.toJson(c);
       mEditor.putString(yourSettingName, writeValue);
       mEditor.commit();
       return true;
   }
   catch(Exception e)
   {
       return false;
   }
}

public Customer readJSON(String yourSettingName)
{
   String loadValue = mSettings.getString(yourSettingName, "");
   Customer c = mGson.fromJson(loadValue, Customer.class);
   return c;
}

然后您可以调用这些方法,它会让您知道写作是否成功,当您打电话给它时,它会返回您之前保存的客户对象。

希望这可以帮助你

答案 1 :(得分:0)

GSON的想法是它可以将JSON字符串直接转换为Java对象。以下是使用GSON解析JSON字符串的示例:

Gson gson = new Gson();
Notes notes = gson.fromJson(json.toString(), Notes.class);

这将解析JSON并将其转换为Notes对象。

将其转换回来应该如下所示,但在我的代码库中我不会使用它,所以它未经测试:

Gson gson = new Gson();
String json = gson.toJson(notes, Notes.class);