有没有办法将2D数组存储在持久存储中?

时间:2012-03-12 10:56:31

标签: android arrays persistence

我想加载像这样的2D数组:

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

实际上,这些是单选按钮状态,false表示单选按钮取消选中,而true表示单选按钮已被选中。

为了解释整个场景,我正在创建一个测验,其中有一个问题和选项,我创建了一个radiobuttonStates[][] 2D数组。第一个[]表示问题数量与第二个[]中的选项数量。有一个保存和退出按钮,用于保存测验(保存用户离开的位置的问题编号和选定的单选按钮,既可以使用也可以存在)。所以我在测验的第一次尝试中创建的2D数组,我想在用户再次返回并重新开始测验时加载这个相同的数组。现在我想将这个数组存储在一些持久存储(数据库或任何类型)中。但我没有办法如何存储。用户单击恢复按钮,我显示数据库中的当前问题编号,但无法显示单选按钮选择。请帮帮我。

3 个答案:

答案 0 :(得分:1)

你可以随时将你的布尔数组转换为字符串(或更多字符串),并将其存储在SharedPreferences中。

例如:ResultString =" false,true,false,false&#34 ;;

如果您需要从SharedPreference返回结果,只需拆分字符串,使用某个分隔符(例如",")并重复使用已保存的数据。

像这样,您可以更快地存储/恢复数据备份。使用SQLite存储这种数据并不是一个好主意。

祝你好运, Arkde

答案 1 :(得分:0)

好吧,您可以创建某种表结构,将每个单独的数组值放在特定的行/列中。但是,如果您的数组包含少量元素(如您在问题中展示的元素),则可以序列化实例并将字节保存在数据库中。通过这种方式,您不必制作满足每个数组值的所有样板代码,并将其放入某个行/列,然后使用各种行/列值构建数组。

答案 2 :(得分:0)

一种简单而直接的方法是存储数组或多个2d数组是使用文件来读写数组对象。

下面是代码示例,它从文件中重写我的自定义对象并将它们写入文件。下面方法中唯一的事情就是在读取它时会重写所有对象,并且在写入时再次写入所有对象意味着您不能将单个对象附加到先前文件或从文件中读取单个对象。因此,如果你要附加另一个数组,你必须阅读所有以前的数组,然后再添加一个你想要追加的增量。

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