Сохранение Arraylist в Android - PullRequest
       18

Сохранение Arraylist в Android

1 голос
/ 06 ноября 2011

У меня худшее время в мире, когда я пытаюсь понять, как спасти что-нибудь.Все, что я хочу сделать, - это сохранить Arraylist ints, в котором я могу сохранить некоторые высокие результаты. И я, похоже, не могу найти способ сделать это.Я попытался сериализовать данные и использовать поток ввода файлов для их сохранения, но тогда не было возможности загрузить их и деарлизировать данные, потому что единственный способ прочитать данные из потока ввода файлов - это прочитать их как int.Я попытался написать и прочитать каждое число в массиве по отдельности, но затем я получаю ошибки нулевого указателя.У кого-нибудь есть хороший способ сделать это / есть хороший пример того, как это сделать?Заранее спасибо.

-Дерек

Ответы [ 3 ]

2 голосов
/ 06 ноября 2011

Я бы использовал базу данных SQL вместо того, чтобы бороться с файлами данных.

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

1 голос
/ 06 ноября 2011

Вероятно, самый простой способ - это сериализовать / десериализовать ваш объект из строки, которую вы можете сохранить в SharedPreference.Код ниже должен сделать это для вас:

public static void saveArray(Context ctx, int[] array) {
        String strArr = "";
        for (int i=0; i<array.length; i++) {
            strArr += array[i] + ",";
        }
        strArr = strArr.substring(0, strArr.length() -1); // get rid of last comma

        Editor e = PreferenceManager.getDefaultSharedPreferences(ctx).edit();
        e.putString("MY_ARRAY", strArr);
        e.commit();
    }

    public static int[] getArray(Context ctx) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
        String str = prefs.getString("MY_ARRAY", null);
        String[] strArr = str.split(",");
        int[] array = new int[strArr.length];
        for (int i=0; i<strArr.length; i++) {
            array[i] = new Integer(strArr[i]);
        }
        return array; 
    }
0 голосов
/ 06 ноября 2011

Я бы сделал класс с именем PersistentManager или что-то еще, добавив эти два метода. Вы должны передать getApplicationContext () этим методам.

public static ArrayList<Integer> getArrayList(Context context)
{
    String line;
    ArrayList<Integer> list = new ArrayList<Integer>();
    StringBuilder fullText = new StringBuilder();

    try {
        FileInputStream stream = context.openFileInput("myFileName");
        InputStreamReader inputStreamReader = new InputStreamReader(stream); 
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        while ((line = bufferedReader.readLine()) != null) 
        {
            fullText.append(line);
        }
        if (fullText.length() > 0) 
        {
            String[] myInts = fullText.toString().split(",");
            for (String intString : myInts)
            {
                list.add(Integer.getInteger(intString));
            }
        }
    } catch (Exception e) {}
    return list;
}

public static void setArrayList(ArrayList<Integer> myInts, Context context)
{
    FileOutputStream fos;
    try
    {
        fos = context.openFileOutput("myFileName", Context.MODE_PRIVATE);
        for (Integer integer : myInts)
        {
            fos.write((integer.toString() + ",").getBytes());
        }
        fos.close();
    } catch (FileNotFoundException e){} 
    catch (IOException e){}
}
...