ObjectOutputStream中的布尔arraylist

时间:2017-11-11 16:52:24

标签: java android arraylist

我想在本地文件中存储boolean arraylist并在onCreate()中加载值。 我正在使用

public void saveBoolean(String fileName, ArrayList<Boolean> list){
    File file = new File(getDir("data", MODE_PRIVATE), fileName);
    ObjectOutputStream outputStream = null;
    try {
        outputStream = new ObjectOutputStream(new FileOutputStream(file));
    } catch (IOException e) {
        //
    }
    try {
        outputStream.writeObject(list);
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        outputStream.flush();
    } catch (IOException e) {
        //
    }
    try {
        outputStream.close();
    } catch (IOException e) {
        //
    }
}

private ArrayList<Boolean> getSavedBooleanList(String fileName) {
    ArrayList<Boolean> savedArrayList = new ArrayList<>();

    try {
        File file = new File(getDir("data", MODE_PRIVATE), fileName);
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
        savedArrayList = (ArrayList<Boolean>) ois.readObject();
        ois.close();
    } catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
    }

    return savedArrayList;
}

但在尝试初始化自定义视图列表视图时调用NullPointerExcpetion。我也在保存和加载这样的字符串和整数列表,加载字符串列表但是没有初始化整数和布尔列表,因此长度为0,我的代码在listview位置加载值,因此它调用错误,因为长度为0而inxed是示例2.这里有什么方法可以将整数和布尔列表保存/加载到文件中,或者我必须在保存之前将布尔值和整数转换为字符串? 谢谢你的每一个回复。

1 个答案:

答案 0 :(得分:0)

您的方法的替代方法是保存共享首选项

你去:

 private void saveToSharedPreference(ArrayList<Boolean> arrayList) {
    Gson gson = new Gson();
    SharedPreferences sharedPreferences = this.getSharedPreferences("Test", Context.MODE_PRIVATE);
    sharedPreferences.edit().putString("ArrayList", gson.toJson(arrayList)).commit();
}

private ArrayList<Boolean> getSharedPreference() {
    Gson gson = new Gson();
    SharedPreferences sharedPreferences = this.getSharedPreferences("Test", Context.MODE_PRIVATE);
    String booleanString = sharedPreferences.getString("ArrayList", null);
    TypeToken<ArrayList<Boolean>> typeToken = new TypeToken<ArrayList<Boolean>>() {
    };
    ArrayList<Boolean> booleen = gson.fromJson(booleanString, typeToken.getType());
    return booleen;
}