从资产中读取对象

时间:2018-08-28 10:14:15

标签: java android objectinputstream

有些东西真的搞砸了。我在资产文件夹中有一个“ .ser”文档,其中存储了Objetcs的ArrayList。在一个Android应用程序中,我想读取此对象。有很多与此问题相关的帖子,但是没有一个可以解决我的问题。奇怪的是,当我在非android上下文/“正常” java中使用类似代码时,它可以正常工作。在这里,最后一行抛出NullPointerException-怎么了?

public void getData() {
    ArrayList<MyClass> output= null;
    InputStream is = null;
    ObjectInputStream ois = null;
    try{
        is = this.getAssets().open("data.ser");
        ois = new ObjectInputStream(is);

        output = (ArrayList<MyClass>)ois.readObject();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            ois.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    Log.d("TAG", output.get(0).getId());
}

1 个答案:

答案 0 :(得分:0)

我将创建一个类并将该数组放置在单个对象中:

public class ListObjects implements Serializable {

    List<MyClass> listMyClass = new ArrayList<>();

    public ListObjects(){

    }

    public List<MyClass> getListMyClass() {
        return listMyClass;
    }

    public void setListMyClass(List<MyClass> listMyClass) {
        this.listMyClass = listMyClass;
    }

}

我有类似的问题。这是因为Java应用程序中的软件包名称与android中的软件包名称不同。因此,我不认为它们是平等的对象。这是我的方法:

public static Object fromData(byte[] data) {
        ObjectInputStream ois = null;
        Object object = null;
        try {
            ois = new ObjectInputStream(
                    new ByteArrayInputStream(data));
            object = ois.readObject();
        } catch (Exception ex) {
            Logger.getLogger(ModeloApp.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                ois.close();
            } catch (Exception ex) {
                Logger.getLogger(ModeloApp.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return object;
    }