我正在构建一个程序,该程序随机生成类型为:
的多维列表数组 ArrayList(ArrayList(ArrayList(String)));
我的挑战是找到一种方法来保存和恢复这些数组列表(随机生成)。我相信一个解决方案是将它们转换为字符串并从该字符串恢复数组,虽然我似乎无法找到一种方法(我尝试了Json和deepToString)。如果有人有想法,请告诉我。谢谢。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
Gson gson = new Gson();
if (savedInstanceState == null) {
//GEREATE MAP
GenMap();
jsonmaps = gson.toJson(maps);
} else {
maps = gson.fromJson(jsonmaps, new TypeToken<ArrayList<ArrayList<ArrayList<String>>>>() {
}.getType());
}
//LAYOUT MAP
MapLayout();
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
jsonmaps = savedInstanceState.getString("Sjsonmaps");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString("Sjsonmaps", jsonmaps);
}
答案 0 :(得分:1)
以下程序显示将多维数组转换为jsonString并使用相同的jsonString还原回多维数组。 您还可以存储已转换的json String并在需要时还原。
public static void main(String[] args) {
ArrayList<ArrayList<ArrayList<String>>> maps = new ArrayList<ArrayList<ArrayList<String>>>();
Gson gson = new Gson();
ArrayList<String> list10 = new ArrayList<String>();
list10.add("str10");
list10.add("str11");
list10.add("str12");
ArrayList<String> list11 = new ArrayList<String>();
list11.add("str20");
list11.add("str22");
list11.add("str23");
ArrayList<ArrayList<String>> list20 = new ArrayList<ArrayList<String>>();
list20.add(list10);
list20.add(list11);
ArrayList<ArrayList<String>> list21 = new ArrayList<ArrayList<String>>();
ArrayList<String> list13 = new ArrayList<String>();
list13.add("str30");
list13.add("str31");
list13.add("str32");
list21.add(list13);
maps.add(list20);
maps.add(list21);
String jsonString = gson.toJson(maps);
System.out.println(jsonString); // maps is converted to jsonString
// converted value is [[["str10","str11","str12"],["str20","str22","str23"]],[["str30","str31","str32"]]]
ArrayList<ArrayList<ArrayList<String>>> genratedMap = gson.fromJson(jsonString, new TypeToken<ArrayList<ArrayList<ArrayList<String>>>>() {}.getType());
System.out.println("genratedMap : " + genratedMap); // jsonString restored back to maps (ArrayList)
}
注意:在上面的程序中,我使用了Gson Library - https://github.com/google/gson
答案 1 :(得分:0)
您可以使用标准序列化,因为ArrayList
和String
是可序列化的。
以下是一个例子:
public static void main(String args[]) throws Exception{
ArrayList<String> obj = new ArrayList<>();
obj.add("Hello");
System.out.println(obj);
/* Writing */
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myFile"));
oos.writeObject(obj);
oos.close();
/* Reading */
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myFile"));
ArrayList<String> obj2 = (ArrayList<String>) ois.readObject();
ois.close();
System.out.println(obj2);
}