简体   繁体   中英

Reading objects from assets

something is really messed up. I've got a ".ser" document in the assets folder, which stores an ArrayList of Objetcs. In an android application, I want to read this objects. There are a lot of posts related to this issue, however none of them could solve my problem. The strange part is, when I am using similar code in non - android context / "normal" java, it works properly. Here, the last line throws a NullPointerException - What is going wrong?

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

I would create a class and place the array within a single object:

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;
    }

}

I had a similar problem. And it was because the name of the package in the java app was not called the same as the package name in android. And therefore I did not recognize them as equal objects. This is how I do it:

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;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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