Чтение объектов из ресурсов - PullRequest
0 голосов
/ 28 августа 2018

что-то действительно запутано. У меня есть «.ser» документ в папке активов, в котором хранится ArrayList of Objetcs. В приложении для 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 голосов
/ 28 августа 2018

Я бы создал класс и поместил массив в один объект:

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