java - 从资产中读取对象
问题描述
事情真的搞砸了。我在资产文件夹中有一个“.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());
}
解决方案
我会创建一个类并将数组放在一个对象中:
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;
}
推荐阅读
- python - 使用 python 的 Lucas-Lehmer 素性测试
- laravel - 流明文件上传测试:请求中不存在文件
- scala - sparkSQL:“作业中未指定输入路径”,但同样的语句在 spark-shell 中工作
- python - 如何使用内置身份验证机制保护我的 Azure WebApp
- docker - nexus3 docker 容器中的权限问题
- angularjs - 模型在子指令中更改,在模板中有效,而不是在父指令中具有两种绑定的链接函数
- node.js - 在 MEAN 中按 ID 显示图像
- ruby - 通过访问传入块的上下文来评估代码
- spring-mvc - Spring4 表单验证
- javascript - Fetch 和 Axios 的区别