繁体   English   中英

如何加载文件并将其保存在Android中的对象列表中?

[英]How I can load a file and save this in a list of objects in Android?

嘿我的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();
    }
}

如果您可以在将对象写入文件的位置附加代码,那就太棒了。
正如错误消息所示,您可能正在写入文件中的记录并尝试将其作为列表读取。 相反,您应该将其编写为ArrayList并将其作为List读取。

您的应用程序似乎在此行崩溃:

result = (List<Record>) obj;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM