新闻的离线下载功能仿网易之(一) 基本功能实现

来源:互联网 发布:linux执行sql文件 编辑:程序博客网 时间:2024/03/29 19:00

首先说一下这个功能的功能点

第一点,像网易新闻一样,用户在登录和未登录情况下都可以离线下载新闻。

第二点,用户的离线下载最多固定10个频道,每个频道的第一页。

第三点,用户下载后的新闻在无网情况下可以直接查看。

这里初步完成以上三种功能,所用的方法和思路如下 :

一,从服务器的接口中获取json数据并解析

二,将解析出来的新闻的url串遍历通过io流存储到文件

三,用webview打开本地文件

思路和功能点清晰明了,下面看关键代码段,其中有些代码并不十分简洁,还有提升的空间,欢迎留言评论。

网络请求

case R.id.personal_download:String url = "http://10.10.153.51/headline_hp/index.php?m=webapi&f=content&v=downNews";HttpsDownLoad(url);
解析返回数据

private void HttpsDownLoad(final String serverURL) {httpInstance = new HttpInstance();new Thread(new Runnable() {public void run() {try {String data = httpInstance.getInstance().doHttpGet(serverURL);DownNonet downNonetbean = new Gson().fromJson(data, DownNonet.class);if (downNonetbean.rt == 0) {downDetails = downNonetbean.data;handler.sendEmptyMessage(110);} else if (downNonetbean.rt == 90001) {handler.obtainMessage(Constants.SEND_AUTCH_ERROR).sendToTarget();} else if (downNonetbean.rt == 91008) {handler.obtainMessage(Constants.SEND_TICKET_ERROR).sendToTarget();} else {handler.obtainMessage(Constants.SEND_FAILD).sendToTarget();}} catch (Exception e) {e.printStackTrace();handler.sendEmptyMessage(111);}}}).start();}

采用耗时操作进行io流的读取

case 110:if (downDetails != null) {new Thread(new Runnable() {public void run() {for (DownDetail downDetail : downDetails) {webviewdetail = downDetail.webview;SPDataTools.spSavefownfile(getActivity(), downDetail.id, downDetail.cid, webviewdetail);try {Log.d("zhsy", "webviewdetail====" + webviewdetail);FileUtiils.downFile(downDetail.cid + "downfile" + downDetail.id, webviewdetail, getActivity());} catch (Exception e) {e.printStackTrace();Log.d("zhsy", "e==" + e);}}}}).start();}break;

读取文件的包装类

public static void downFile(String filename,String url,Context context) throws Exception{//getFilesDir()获取你app的内部存储空间,相当于你的应用在内部存储上的根目录。//File dest = new File(context.getFilesDir(),filename);    File dest = new File("/sdcard/data/"+filename+".html");    InputStream is;//接收字节输入流    FileOutputStream fos = new FileOutputStream(dest);//字节输出流    URL wangyi = new URL(url);    is = wangyi.openStream();    BufferedInputStream bis = new BufferedInputStream(is);//为字节输入流加缓冲    BufferedOutputStream bos = new BufferedOutputStream(fos);//为字节输出流加缓冲    int length;    byte[] bytes = new byte[1024*20];    while((length = bis.read(bytes, 0, bytes.length)) != -1){        fos.write(bytes, 0, length);    }    bos.close();    fos.close();    bis.close();    is.close();}
无网络情况下用webview读取本地文件
if (!NetUtils.isConnected(this)) {filename = newDetail.cid +"downfile"+ newDetail.id;Log.v("zhsy", "newDetail.cid====="+newDetail.cid+"==newDetail.id=====" + newDetail.id+"==filename==="+filename);webView.loadUrl("file:///sdcard/data/"+filename+".html");}


好了,以上就是这个功能的基本功能和核心代码段,有什么问题可以留言交流哦~欢迎 阅读~

1 0
原创粉丝点击