ObjectInputStream readObject()不稳定的行为?

时间:2018-03-12 13:15:23

标签: android internal-storage android-internal-storage

我目前正在为高中的小组制作应用程序。我们决定制作个人融资应用程序来组织您的支出。 我正在尝试使用内部存储来存储数据。我已经为此创建了一个InternalStorage课程(这是其他人对我这样的问题的回答,但我忘了从哪里开始。哎呀。),writeread相应的方法。 然而,在调试时我发现了一些难以置信的行为。

public final class InternalStorage {
    private static String key = "billify";

    public static void write(Context context, List<Bill> billList){
        try{
             FileOutputStream fos = context.openFileOutput(key, Context.MODE_PRIVATE);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(billList);
            oos.close();
            fos.close();
        }catch(IOException e){
            Toast.makeText(context,"Internal storage write error: IOException", Toast.LENGTH_LONG).show();
        }
    }

    public static List<Bill> read(Context context){
        try {
            FileInputStream fis = context.openFileInput(key);
            ObjectInputStream ois = new ObjectInputStream(fis);
            List<Bill> a = (List<Bill>) ois.readObject();//jumps from here
            return a;
        }catch(Exception e){
            e.printStackTrace();
            Toast.makeText(context,"Internal storage read error",Toast.LENGTH_LONG).show();
            return null;//jumps to here w/o triggering previous two lines.
        }
    }
}

我在read()的所有代码行中放置了断点,从我看到的代码中运行ois.readObject(),然后而不运行e.printStackTrace()和Toast,跳过直接回到return null

有人知道发生了什么吗?

编辑:

    if(z.getClass() == cls){
        ArrayList<Bill> a = (ArrayList<Bill>) z;//Jumps from here now
        return a;
    }
    return null;

执行检查后的转换仍会使同样的事情发生 - 类是相同的,但是执行转换仍然会使它跳转到上一个null

0 个答案:

没有答案