【问题标题】:Is there any way to store a 2D array in a persistant storage?有没有办法将二维数组存储在持久存储中?
【发布时间】:2012-03-12 10:56:30
【问题描述】:

我想加载一个像这样的二维数组:

[
  [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 数组,我想在用户再次回来并恢复测验时加载这个相同的数组。现在我正在考虑将此数组存储在一些持久存储(数据库或任何类型)中。但我对如何存储没有任何办法。用户单击恢复按钮,我正在显示数据库中的当前问题编号,但无法显示单选按钮选择。请帮帮我。

【问题讨论】:

  • 有几种方法:如果是一组少量按钮,那么您可以将它们存储在 SharedPreferences 中,将每个条目命名为“Button1-2”左右。如果数字更高,您可以将数据作为 XML/JSON/Serializable/.. 写入磁盘,也可以使用 SQLiteDatabase

标签: android arrays persistence


【解决方案1】:

你总是可以将你的布尔数组转换成一个字符串(或多个字符串),并将其存储在SharedPreferences 中。

例如:ResultString = "false,true,false,false";

当您需要从 SharedPreference 返回的结果时,只需使用特定分隔符(例如“,”)拆分字符串并重复使用您保存的数据。

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

祝你好运, 方舟

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      一种简单快捷的方法是存储数组或多个二维数组是使用文件来读取和写入您的数组对象。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-14
        • 1970-01-01
        相关资源
        最近更新 更多