【发布时间】:2016-04-22 23:50:48
【问题描述】:
嘿,我的 Android 应用有问题。我是 Android 开发的新手,我尝试了一个小 Android 应用程序。我想将输入保存在文件中并加载它。我想在文件中保存一个对象(或对象列表)序列化。我的想法是加载此文件(如果存在)并用它们填充我的 ListView,否则我有一条短信。
我在 LogCat 和 Android Monitor 中调试我的应用程序。我有一点想法错误在哪里。
问题是,如果我启动我的应用程序并且 onStart 方法开始。我执行一个函数,它给我一个记录列表。但是为此,我将文件加载到此列表中。(这是我认为的错误)。
这是我在 LogCat 中的错误:(其中的一部分)
04-22 19:41:29.547 13928-13928/de.tarasov.wladimir.leistungen E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.tarasov.wladimir.leistungen, PID: 13928
java.lang.RuntimeException: Unable to start activity ComponentInfo{de.tarasov.wladimir.leistungen/de.tarasov.wladimir.leistungen.persistence.RecordsActivity}: java.lang.ClassCastException: de.tarasov.wladimir.leistungen.models.Record cannot be cast to java.util.List
这是我的 MainActivity:
@Override
protected void onStart(){
super.onStart();
List<Record> records = RecordDAO.findAll(this);
ArrayAdapter<Record> adapter =
new ArrayAdapter<Record>(this,
android.R.layout.simple_list_item_1,records);
mRecordsListView.setAdapter(adapter);
}
这是 RecordDAO:
public static List<Record> findAll(Context ctx){
List<Record> result;
Object obj = null;
File f = ctx.getFileStreamPath("records.obj");
if(f.exists()){
try(FileInputStream in = ctx.openFileInput("records.obj")){
ObjectInputStream objIn = new ObjectInputStream(in);
obj = objIn.readObject();
}catch(Exception e){
e.printStackTrace();
}
}
if(obj != null){
result = (List<Record>) obj;
}else{
result = new ArrayList<>();
}
return result;
}
更新:这是我保存对象的方法。
public static void persistAll(Context ctx, List<Record> records){
try(FileOutputStream out = ctx.openFileOutput("records.obj",Context.MODE_PRIVATE)){
ObjectOutputStream objOut = new ObjectOutputStream(out);
objOut.writeObject(records);
}catch(Exception e){
e.printStackTrace();
}
}
【问题讨论】:
-
日志猫消息说
de.tarasov.wladimir.leistungen.models.Record cannot be cast to java.util.List所以取决于错误必须在findAll方法result = (List<Record>) obj;我认为你需要一个循环来循环遍历对象并且每次添加一个对象到列表 -
records.obj 中有哪些内容?该异常很可能是由
result = (List<Record>) obj;引发的。不使用 JSON 存储对象的任何特殊原因?如果你这样做了,你会使用 TypeToken 并做类似convert from Json to a typed ArrayList<T>
标签: java android android-studio serialization fileinputstream