缓存List到Cache目录,遇到的问题与解决

本文记录了一个初学者在Android项目中尝试将聚合数据JSON解析后的List存入缓存时遇到的问题,包括EROFS错误、EBADF错误以及对象序列化问题。通过添加写入权限、正确构建文件路径和实现Serializable接口,逐步解决了问题。同时推荐了两篇关于Android缓存的深入文章进行学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:这仅仅只是一个初学者的设想,可能实用性并不高

在做一个项目的时候,需要从聚合数据上获取数据,JSON解析后封装成类,存到List里,然后放入ListView中显示。

从获取到显示此数据的方法很简单,而且代码稍长,就不在这里详细列出了。

一开始,只是随便查了查数据就开始写,结果遇到问题越来越多。

1)直接调用context.getExternalCacheDir().getAbsoluteFile()方法,错误代码如下

W/System.err(2140): java.io.IOException: open failed: EROFS (Read-only file system)

查了查网上资料,有的说是不允许写入操作,需要启动linux更改adb设置等等;后来想了想,貌似忘记加权限了,所以在读写文件时,别忘了添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

2)当然,即便添加了,又遇到了W/System.err(4335): Caused by: libcore.io.ErrnoException: write failed: EBADF (Bad file number) 这个问题;这是因为拼接文件路径的时候,少加了“/”的原因~4

3)基本功不好,写东西总是查来查去的,即使路径对了,问题还是没有解决,因为对象忘了实现序列化,也就是实现Serializable接口......

4)想到的写入文件的写法如下:

if(!file.exists())
{
try {
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file, true);
for(Book book: result)
{
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(book);
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}

当然,还是没有写入成功!!!!!!!!!!!!!!!

=================================================================================

遇到的问题太多了,打算拜读两篇文章再继续

1. Android缓存字符串,对象等其他数据

地址:http://my.oschina.net/u/1471093/blog/345946

2. Android DiskLruCache完全解析,硬盘缓存的最佳方案(郭大写的)

========================================================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值