Есть ли способ сохранить 2D-массив в постоянном хранилище? - PullRequest
1 голос
/ 12 марта 2012

Я хочу загрузить двумерный массив, подобный этому:

[
  [false, true, false, false],
  [true, false, false, false],
  [false, false, false, true],
  [false, false, true, false],
  [false, false, true, false]
]

На самом деле, это состояния переключателей, ложь, указывающая, что радиопереключатель снят, в то время как истина указывает на то, что переключатель отмечен.

Чтобы объяснить весь сценарий, я создаю тест, в котором есть вопрос и варианты для этого. Я создал radiobuttonStates[][] 2D-массив. Первый [] указывает количество вопросов в зависимости от количества вариантов во втором []. Есть кнопка сохранения и выхода, которая сохраняет тест (сохранение номера вопроса с того места, где пользователь ушел, и выбранных переключателей, как предыдущих, так и текущих). Итак, 2D массив, который я создал в первой попытке теста, я хочу загрузить этот же массив, когда пользователь снова вернется и возобновит тест. Прямо сейчас я думаю сохранить этот массив в некотором постоянном хранилище (База данных или любой другой). Но я не понимаю, как хранить. Пользователь нажимает кнопку возобновления, и я показываю текущий номер вопроса из базы данных, но не могу показать выбор переключателя. Пожалуйста, помогите мне.

Ответы [ 3 ]

1 голос
/ 12 марта 2012

Ну, вы всегда можете преобразовать свой логический массив в строку (или больше строк) и сохранить его в SharedPreferences.

Например: ResultString = "false, true, false, false";

Когда вам нужен результат обратно из SharedPreference, просто разбейте строки, используя определенный разделитель (например,",") и повторно сохраните сохраненные данные.

Таким образом, вы быстрее сохраните / восстановите резервную копию данных.Использование SQLite для хранения данных такого рода не очень хорошая идея.

Удачи, Arkde

0 голосов
/ 12 марта 2012

Простой и быстрый способ сохранить массив или несколько двумерных массивов - это использовать файл для чтения и записи вашего массива.

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

    public static boolean writeBlockedMessagesInFile(Context context,
            ArrayList<BlockedMessages> blockedMessages) {
        boolean status = false;
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;

        try {
            fos = context.openFileOutput("BlockedMessagesFile.dat",
                    Context.MODE_WORLD_WRITEABLE);
            oos = new ObjectOutputStream(fos);
            if (blockedMessages != null && blockedMessages.size() != 0) {
                for (int i = 0; i < blockedMessages.size(); i++)
                    oos.writeObject(blockedMessages.get(i));
            }
            oos.flush();
            oos.close();
            fos.close();
            status = true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return status;
    }


    public static ArrayList<BlockedMessages> readBlockedMessagesFromFile(Context context) {
        ArrayList<BlockedMessages> blockedMessages = new ArrayList<BlockedMessages>();
        FileInputStream fis = null;
        ObjectInputStream ois = null;
        Object object = null;
        try {
            fis = context.openFileInput("BlockedMessagesFile.dat");
            ois = new ObjectInputStream(fis);
            BlockedMessages blo;
            Object temp;
            try {
                while ((blo = (BlockedMessages) ois.readObject()) != null) {
                    blockedMessages.add(blo);
                }
            } catch (NullPointerException npe) {
                npe.printStackTrace();
            } catch (EOFException eof) {
                eof.printStackTrace();
            } catch (FileNotFoundException fnfe) {
                fnfe.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (ois != null) {
                    ois.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return blockedMessages;
    }
0 голосов
/ 12 марта 2012

Ну, вы можете создать некую структуру таблицы, в которой вы поместите каждое отдельное значение массива в определенную строку / столбец. Однако, если ваш массив содержит небольшое количество элементов (например, тот, который вы демонстрируете в своем вопросе), вы можете просто сериализовать экземпляры и сохранить байты в базе данных. Таким образом, вам не нужно будет создавать весь код платформы, который обрабатывает каждое значение массива и помещает его в какую-либо строку / столбец, а затем создает массив из различных значений строки / столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...