我创建了一个益智游戏,其中可以对切片进行洗牌以重新创建图像。该应用程序几乎已完成,除了我保存数据的部分,以便在重新启动应用程序时可以继续游戏。我找到了一些有关SharedPreferences的信息,但我知道无法用它保存List。我有一个整数列表,其中包含拼图的索引,需要保存。我尝试将List转换为字符串并检索它,但它变坏了并搞砸了我的整个程序。我没有足够的技能来解决它,所以我正在联系你。因此,我的问题是,如何保存整数列表?
如果之前已经提出过这个问题,请提前抱歉,我一直在互联网上看了两个多小时,我真的需要一些帮助。 :)
答案 0 :(得分:1)
正确的方法是转换为String
,然后将其放入SharedPreferences
。您可以将List
转换为String
,如下所示:
public static String listIntToString(List<Integer> list) {
StringBuilder s = new StringBuilder();
for (int i: list)
s.append(i).append(" ");
return s.toString();
}
现在回到List<Integer>
:
public static List<Integer> stringToListInt(String s) {
List<Integer> result = new ArrayList<>();
Scanner scan = new Scanner(s);
while (scan.hasNextInt())
result.add(scan.nextInt());
scan.close();
return result;
}
这比弄乱文件或数据库或XML更简洁。
实际上,如果你想变得可爱,那么你可以使用List<Integer>
方法将String
转换为.toString()
,然后使用它来回到{{1} }:
List<Integer>
这样,您只需要定义一个辅助方法。这是有效的,因为public static List<Integer> defaultStringToListInt(String s) {
List<Integer> result = new ArrayList<>();
Scanner scan = new Scanner(s);
scan.useDelimiter(Pattern.compile("[, \\[\\]]+"));
while (scan.hasNextInt())
result.add(scan.nextInt());
scan.close();
return result;
}
上的.toString()
方法与
List<Integer>
并且上面的代码通过查找整数进行扫描,使用方括号,逗号和空格作为分隔符。
答案 1 :(得分:0)
您可以使用数据库存储应用在重新启动时将检索的信息,或者(可能更简单的方法)是将整数列表保存到文件中,并在应用重新启动时从中读取。
答案 2 :(得分:0)
我建议创建一个XML,然后在每次应用启动时读取它以收集数据。您可以执行以下操作来编写XML;
// Create your document and it's root element.
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElement("root");
doc.appendChild(root);
// Loop through your list and create an xml element for each list element.
for(Integer i : yourList){
Element listItem = doc.createElement("integer");
listItem.setAttribute("value", i.toString());
root.appendChild(listItem);
}
// write the the Document to where-ever you want.
FileOutputStream fos = yourContext.openFileOutput("data_store.xml", Context.MODE_PRIVATE);
TransformerFactory factory = new TransformerFactory();
Transformer transformer = factory.newTransformer();
DOMSource source = new DOMSource(root);
StreamResult result = new StreamResult(fos);
transformer(source, result);
简单地阅读您的XML;
FileInputStream fis = yourContext.openFileInput("data_store.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(fis);
// Get & loop through a list of all integer elements
NodeList nodes = doc.getElementsByTagName("integer");
for(Node n : nodes){
if(n.getNodeType() == Node.ELEMENT_NODE){
Element e = (Element) n;
yourList.add(Integer.parseInt(e.getAttribute("value")));
}
}
虽然上面的内容有点过分,但您可能会发现自己想要存储其他相关细节,在这种情况下,此解决方案更具可扩展性。我希望这会有所帮助。
进一步阅读;