2013-08-21 3 views
0

Я знаю, что есть несколько методов для сохранения данных в приложении Android, но мне интересно, что является самым простым и/или наиболее эффективным, или, другими словами, какой метод будет выигрывать по шкале сложности/рациональности/представление.Лучший способ хранения содержимого ArrayList для приложения для Android?

В основном у меня есть только два класса ArrayLists (ArrayLists объектов класса, а не примитивные типы данных). Один конструктор объекта ArrayList принимает три целых числа, остальные четыре. Мне в основном нужно хранить значение этих целых чисел (у меня есть методы для каждого набора, чтобы возвращать целые числа либо в виде строк, либо в ints), с указанием того, к чему принадлежит каждый.

Например, если у меня есть: arrayListOne.get (1) .getNumbers() возвращение 1, 2, 3 arrayListTwo.get (1) .getNumbers() возвращение 1, 2, 3, 4

и целую кучу других индексов, которые будут возвращать разные числа, как я могу хранить эти данные, поэтому, когда приложение закрыто и перезагружено, оно перезагружается, и значения остаются верными индексам, в которые они были инициализированы?

+0

ли динамические показатели? например, связанный с веб-сервисом или статические данные – Ranjith

ответ

0

Я нашел объекты сохранения, поскольку строки JSON были очень простыми и эффективными. Ознакомьтесь с библиотекой GSON. Он будет конвертировать из JSON в java и java обратно в JSON с очень маленьким воплем.

https://code.google.com/p/google-gson/

Я люблю GSON для делать это очень вещь.

1

Дать это внутреннему хранилищу - одно из решений. Вы можете использовать следующие как статический метод внутри класса Util:

Получить ArrayList:

final static String OBJECT_1_LIST = "object_1_list"; 
static ArrayList<MyObject1> object1List = null; 

static ArrayList<MyObject1> getObject1List(Context mContext) { 
    FileInputStream stream = null; 

    try { 
     stream = mContext.openFileInput(OBJECT_1_LIST); 
     ObjectInputStream din = new ObjectInputStream(stream); 
     object1List = (ArrayList<MyObject1>) din.readObject(); 
     stream.getFD().sync(); 
     stream.close(); 
     din.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e1) { 
     e1.printStackTrace(); 
    } 

    if (object1List == null) { 
     object1List = new ArrayList<MyObject1>(); 
    } 

    return object1List; 
} 

Аналогично, чтобы обновить ArrayList:

private static void updateObject1List(Context mContext) { 
    FileOutputStream stream = null; 

    try { 
     stream = mContext.openFileOutput(OBJECT_1_LIST, 
       Context.MODE_PRIVATE); 
     ObjectOutputStream dout = new ObjectOutputStream(stream); 
     dout.writeObject(object1List); 
     stream.getFD().sync(); 
     stream.close(); 
     dout.flush(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Чтобы добавить элемент:

static void addToObject1list(Context mContext, MyObject1 obj) { 
    Utilities.getObject1List(mContext).add(obj); 
    Utilities.updateObject1List(mContext); 
} 

Добавить методы для удаления элемента и очистки ArrayList.

Вы также должны MyObject1 реализовать Serializable:

public class MyObject1 implements Serializable { 
    .... 
    .... 
} 
+0

'Serializable' медленно на мобильных устройствах вы должны реализовать' Parcelable' вместо – JBirdVegas

+0

@JBirdVegas 'Serializable медленнее на мобильных устройствах'. Согласовано. Но посмотрите: [Ссылка] (http://developer.android.com/reference/android/os/Parcel.html): 'Парцелла не является механизмом сериализации общего назначения. Этот класс (и соответствующий Parcelable API для размещения произвольных объектов в Parcel) разработан как высокопроизводительный транспорт IPC. Таким образом, нецелесообразно помещать какие-либо данные Parcel в постоянное хранилище: изменения в базовой реализации любой из данных в Посылке могут сделать старые данные нечитаемыми. « – Vikram

+0

Ahh ok Я пропустил часть о постоянном хранении. Спасибо. – JBirdVegas

Смежные вопросы