Android 有没有办法将2D阵列存储在持久存储中?
我想加载一个二维数组,如下所示:Android 有没有办法将2D阵列存储在持久存储中?,android,arrays,persistence,Android,Arrays,Persistence,我想加载一个二维数组,如下所示: [ [false, true, false, false], [true, false, false, false], [false, false, false, true], [false, false, true, false], [false, false, true, false] ] 实际上,这些是单选按钮状态,false表示单选按钮未选中,而true表示单选按钮已选中 为了解释整个场景,我创建了一个测验,其中有一个问题和选项,我
[
[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数组,我想在用户再次返回并恢复测验时加载相同的数组。现在,我正在考虑将此阵列存储在某种持久性存储(数据库或任何类型)中。但我不知道如何储存。用户单击resume按钮,我显示数据库中的当前问题编号,但无法显示单选按钮选择。请帮帮我。好吧,您可以创建某种表结构,将每个单独的数组值放在特定的行/列中。但是,如果数组包含少量元素(如您在问题中展示的元素),则可以序列化实例并将字节保存在数据库中。这样,您就不必生成所有的锅炉板代码,这些代码会将每个数组值放入某一行/列,然后用不同的行/列值构建一个数组。好的,您可以创建某种表格结构,将每个单独的数组值放入特定的行/列中。但是,如果数组包含少量元素(如您在问题中展示的元素),则可以序列化实例并将字节保存在数据库中。这样,您就不必制作所有的锅炉板代码,将每个数组值放入某行/列,然后用不同的行/列值构建一个数组。您可以始终将布尔数组转换为字符串(或多个字符串),并将其存储在SharedReferences
中
例如:ResultString=“false,true,false,false”
当您需要从SharedReference
返回结果时,只需使用某个分隔符(例如“,”)拆分字符串,然后重新使用保存的数据
这样,您可以更快地存储/恢复数据备份。使用SQLite存储此类数据不是一个好主意
祝你好运,
Arkde您始终可以将布尔数组转换为一个字符串(或多个字符串),并将其存储在
SharedReferences
中
例如:ResultString=“false,true,false,false”
当您需要从SharedReference
返回结果时,只需使用某个分隔符(例如“,”)拆分字符串,然后重新使用保存的数据
这样,您可以更快地存储/恢复数据备份。使用SQLite存储此类数据不是一个好主意
祝你好运,
Arkde一种简单而即时的方法是存储数组或多个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;
}
public静态布尔writeBlockedMessagesInFile(上下文,
ArrayList blockedMessages){
布尔状态=假;
FileOutputStream=null;
ObjectOutputStream oos=null;
试一试{
fos=context.openFileOutput(“blockedMessageFile.dat”,
上下文。模式(世界可写);
oos=新对象输出流(fos);
if(blockedMessages!=null&&blockedMessages.size()!=0){
对于(int i=0;i
一种简单而即时的方法是存储数组,或者多个2d数组是使用文件读取和保存