2015-04-15 2 views
0

Можете ли вы мне помочь. Я пытаюсь сохранить мои объекты Java (Customer) в андроиде, в настоящее время я слежу за книгой в своих исследованиях.Как сохранить пользовательский объект Java в Android?

Это то, что я получил, у меня есть объект Customer, у которого есть String и UUID. Благодаря этим я могу успешно их спасти, переведя его с помощью JSON. Моя проблема в том, что я хочу добавить ArrayList объектов, который содержит (Double и две строки) для каждого Клиента. Как сохранить этот ArrayList и получить его внутри этого объекта JSON, когда я конвертирую объект Customer в 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; 
} 

}

ответ

1

Вы можете сделать следующее, чтобы преобразовать весь объект в том числе и ArrayList в json, и вы сможете сохранить его в своем SharedPreferences

Для этого вам необходимо импортировать библиотеку GSON. Вот как вы это делаете.

если вы используете Android Studio

  • Перейти к файлу build.gradle и открыть его
  • прокрутки вниз, пока не увидите dependencies
  • добавьте следующую строку и синхронизировать проект (опция на вершине появляться на экране compile 'com.google.code.gson:gson:2.3.1'

, если вы используете Eclipse,

  • Download gson баночка
  • правой кнопкой мыши проект и выберите Свойства
  • Выберите «Java Пути сборки» на левой стороне, а затем вкладку «Библиотеки». Теперь нажмите «Добавить внешние JARS ..."Кнопка
  • Найдите и выберите файл банку, который вы скачали, а затем нажмите кнопку„Открыть“
  • Наконец нажмите кнопку„ОК“, и вы должны быть в состоянии видеть его под ссылочных библиотек

Теперь код это будет выглядеть примерно так

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

Затем вы можете просто вызвать эти методы, и он сообщит вам, было ли письмо успешным, и когда вы вызываете чтение, оно вернет ваш объект клиента, который вы сохранили ранее.

надеюсь, что это поможет вам

+0

это интересно. Мне кажется, мне нужно импортировать библиотеку. Можете ли вы помочь мне в этом? Можете ли вы также быть моим наставником в моем обучении? Кто-то, на что я смотрю, когда сталкиваюсь с проблемами. Если только у вас есть время. – noooobies123

+0

@ noooobies123, пожалуйста, взгляните на мое сообщение снова. Я редактировал свое сообщение с объяснением того, как добавить библиотеку – NoSixties

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