Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中加载文件并将其保存在对象列表中?_Java_Android_Android Studio_Serialization_Fileinputstream - Fatal编程技术网

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

Java 如何在Android中加载文件并将其保存在对象列表中?,java,android,android-studio,serialization,fileinputstream,Java,Android,Android Studio,Serialization,Fileinputstream,嘿,我的Android应用程序有问题。我是安卓开发的新手,尝试了一款安卓应用程序。我想将输入保存在一个文件中并加载它。我想在文件中保存序列化的对象(或对象列表)。我的想法是加载这个文件,如果存在的话,并用它们填充我的ListView,否则我会有一条短信 我在LogCat和Android监视器中调试我的应用程序。我不知道错误在哪里 问题是,如果我启动我的应用程序,onStart方法开始。我执行一个函数,返回一个记录列表。但为此,我将文件加载到此列表中。(我认为这是错误) 以下是我在LogCat中的

嘿,我的Android应用程序有问题。我是安卓开发的新手,尝试了一款安卓应用程序。我想将输入保存在一个文件中并加载它。我想在文件中保存序列化的对象(或对象列表)。我的想法是加载这个文件,如果存在的话,并用它们填充我的ListView,否则我会有一条短信

我在LogCat和Android监视器中调试我的应用程序。我不知道错误在哪里

问题是,如果我启动我的应用程序,onStart方法开始。我执行一个函数,返回一个记录列表。但为此,我将文件加载到此列表中。(我认为这是错误)

以下是我在LogCat中的错误:(这是其中的一部分)

这是我的主要活动:

@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);

}  
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;
    }
@覆盖
受保护的void onStart(){
super.onStart();
List records=RecordDAO.findAll(this);
阵列适配器=
新阵列适配器(此,
android.R.layout.simple_list_item_1,记录);
mRecordsListView.setAdapter(适配器);
}  
这是记录道:

@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);

}  
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;
    }
公共静态列表findAll(上下文ctx){
列出结果;
objectobj=null;
文件f=ctx.getFileStreamPath(“records.obj”);
如果(f.exists()){
try(FileInputStream in=ctx.openFileInput(“records.obj”)){
ObjectInputStream objIn=新ObjectInputStream(in);
obj=objIn.readObject();
}捕获(例外e){
e、 printStackTrace();
}
}
如果(obj!=null){
结果=(列表)obj;
}否则{
结果=新的ArrayList();
}
返回结果;
}
更新:这是我保存对象的方法

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();
    }
}
publicstaticvoidpersistall(上下文ctx,列表记录){
try(FileOutputStream out=ctx.openFileOutput(“records.obj”,Context.MODE\u PRIVATE)){
ObjectOutputStream objOut=新的ObjectOutputStream(输出);
对象写入对象(记录);
}捕获(例外e){
e、 printStackTrace();
}
}

如果您可以在将对象写入文件的位置附加代码,那就太好了。

正如错误消息所说,您可能正在文件中写入一条记录,并试图将其作为列表读取。相反,您应该将其作为ArrayList编写,并将其作为列表读取。

如果您可以在将对象写入文件的位置附加代码,那就太好了。

正如错误消息所说,您可能正在文件中写入一条记录,并试图将其作为列表读取。相反,您应该将其作为ArrayList编写并作为列表读取。

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

result = (List<Record>) obj;

您的应用程序似乎正在这一行崩溃:

result = (List<Record>) obj;

log cat消息说,
de.tarasov.wladimir.leistungen.models.Record不能强制转换为java.util.List
,因此根据这一情况,错误必须在findAll方法中
result=(List)obj我认为您需要一个循环来遍历对象,每次向列表中添加对象时records.obj中有什么内容?异常很可能是由
result=(List)obj抛出的。不使用JSON存储对象有什么特别的原因吗?如果您这样做了,您将使用TypeToken并执行类似于log cat消息的操作:de.tarasov.wladimir.leistungen.models.Record不能强制转换为java.util.List
,因此根据这一情况,错误必须在findAll方法
result=(List)obj我认为您需要一个循环来遍历对象,每次向列表中添加对象时records.obj中有什么内容?异常很可能是由
result=(List)obj抛出的。不使用JSON存储对象有什么特别的原因吗?如果您这样做了,您将使用TypeToken并执行类似于result.add(obj);//方法add()希望我使用参数types->add(int,Record),…:(您的
列表是来自
java.util
包的
引用吗?如果您的
result
java.util.List
,您可以通过调用
result.add(obj)向其添加
obj
);
。这将在
结果的末尾添加
obj
。无需指定index.result.add(obj);//add()方法希望我使用参数类型->添加(int,Record),…:(您的
List
是来自
java.util
包的引用吗?如果您的
result
java.util.List
,您可以通过调用
result.add(obj);
obj
添加到
result
的末尾。无需指定索引。