android之database disk image is malformed (code 11)

释放双眼,带上耳机,听听看~!

做来电显示归属地和查询归属地功能的时候,需要从服务器下载数据库,

但是下载之后,查询总是报错database disk image is malformed (code 11)

开始以为是查询语句不对,后来意识到,跟之前解析包时出现错误是一样的问题,

下载过程中格式损坏了。

于是解决方法跟http://blog.csdn.net/jason0539/article/details/21742019采取了一样的策略,

把每次读取的数组缩小,代码如下:

public class DownloadTask {
/**
* @param path下载地址
* @param filePath存储路径
* @param progressDialog进度条
* @return
* @throws Exception
*/
public static File getFile(String path,String filePath,ProgressDialog progressDialog) throws Exception{
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(2000);
connection.setRequestMethod("GET");
if(connection.getResponseCode() == 200){
int total = connection.getContentLength();
progressDialog.setMax(total);
InputStream is = connection.getInputStream();//获得socket输入流
File file = new File(filePath);
FileOutputStream fos = new FileOutputStream(file);//file输出流
byte[] buffer = new byte[1024];
int len;
int progress = 0;
while((len = is.read(buffer)) != -1){
fos.write(buffer);
progress += len;
progressDialog.setProgress(progress);
}
fos.flush();
is.close();
fos.close();
connection.disconnect();
return file;
}
return null;
}  

把里面这行里的1024改小就可以避免损坏了,

 byte[] buffer = new byte[1024];  

由于总是错,我甚至改成了

byte[] buffer = new byte[8];

这样是没错了,但是有个弊端,下载变的很慢,下载的数据库是16M的,奇慢无比,

临时性这样解决了。

 

人已赞赏
Android文章

android错误之==与equals的区别

2020-4-17 4:18:07

Android文章

android之onCreateOptionsMenu失效,按菜单键无反应

2020-4-17 5:33:12

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索