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

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

这就是我得到的,我有Customer对象有一个字符串和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 mItems; public Customer(){ mID = UUID.randomUUID(); mItems = new ArrayList(); } //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 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; } 

}

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

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

如果您使用的是Android Studio

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

如果您正在使用Eclipse

  • 下载 gson jar
  • 右键单击您的项目并选择属性
  • 选择左侧的“Java Build Path”,然后选择“Libraries”选项卡。 现在,单击“添加外部JARS …”按钮
  • 找到并选择刚刚下载的jar文件,然后单击“打开”
  • 最后单击“确定”,您应该能够在引用的库下看到它

现在代码看起来像这样

 SharedPreferences mSettings = getSharedPreferences("YourPreferenceName", Context.MODE_PRIVATE); SharedPreferences.Editor mEditor = mSettings.edit(); GsonBuilder gsonb = new GsonBuilder(); Gson mGson = gsonb.create(); 

假设您有两种方法用于保存对象,另一种用于读取对象。

 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; } 

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

希望这可以帮助你

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);