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