2016-04-22 61 views
1

嘿,我的Android应用程序有问题。我是Android开发的新手,尝试一下Android应用程序。我想将输入保存在文件中并加载。我想保存一个对象(或对象列表)在文件中序列化。我的想法是加载这个文件,如果这存在,并填充我的ListView其他我有一个文本消息。如何加载文件并将其保存在Android对象列表中?

我在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(); 
    } 
} 
+0

日志猫消息称'de.tarasov.wladimir.leistungen.models.Record不能转换到java.util.List'所以根据该误差必须在的findAll方法'结果=(名单)obj;' 我想你需要一个循环来遍历对象,每次将对象添加到列表中 –

+0

records.obj中的内容是什么?这个异常很可能是由'result =(列表)obj;'引发的。不使用JSON存储对象的任何特定原因?如果你这样做,你会使用TypeToken并做类似[从Json转换为类型ArrayList ](http://stackoverflow.com/questions/12384064/gson-convert-from-json-to-a-typed- arraylistt) – ishmaelMakitla

回答

0

如果您可以附加代码,将对象写入文件,那将会很棒。
正如错误消息所述,您可能正在写入一个记录并将其作为列表读取。相反,你应该把它写成一个ArrayList并将其作为一个List读取。

+0

我做了更新 – Tarasov

0

看来,你的应用程序在这一行崩溃:

result = (List<Record>) obj; 

尝试检查的obj类型。它看起来可能是Record。如果是这种情况,请尝试将obj添加到result

List<Record> result = new ArrayList(); 
if (obj instanceof Record) { 
    result.add(obj); 
} 
+0

result.add(obj); //方法add()需要我使用parametertypes - > add(int,Record),... :( – Tarasov

+0

是java.util包中的'List'引用吗?https://docs.oracle.com .com/javase/7/docs/api/java/util/List.html#add(E) – Ryan

+0

yes:/ ....我能做些什么 – Tarasov

相关问题