将多维java数组列表转换为字符串,存储和还原

时间:2016-05-08 09:36:54

标签: java android arrays

我正在构建一个程序,该程序随机生成类型为:

的多维列表数组

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

}

2 个答案:

答案 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)

您可以使用标准序列化,因为ArrayListString是可序列化的。

以下是一个例子:

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