设为首页 加入收藏

TOP

Android下保存简单网页到本地(包括简单图片链接转换)(一)
2014-11-24 01:20:00 来源: 作者: 【 】 浏览:9
Tags:Android 保存 简单 网页 本地 包括 图片 链接 转换

最近在做一个项目涉及到将包含图片的简单网页下载到本地,方便离线时观看,在这里分享一下,大家做下简单修改就可以用到自己的项目中了。(这里用到了AQuery库)



package com.nekocode.xuedao.utils;


import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


import com.androidquery.AQuery;
import com.androidquery.callback.AjaxCallback;
import com.androidquery.callback.AjaxStatus;
import com.nekocode.xuedao.PublicData;
import com.nekocode.xuedao.PublicData.Subscribe;


public class HtmlStorageHelper {
private String URL = "http://eduproject.sinaapp.com/fetchurl.php/getcontent/";
private PublicData pd;
private AQuery aq;
private SQLiteDatabase mDB;
private String mDownloadPath;

public HtmlStorageHelper(Context context) {
pd = PublicData.getInstance();
aq = new AQuery(context);
mDB = context.openOrCreateDatabase("data.db", Context.MODE_PRIVATE, null);
mDB.execSQL("create table if not exists download_html(_id INTEGER PRIMARY KEY AUTOINCREMENT, content_id TEXT NOT NULL, title TEXT NOT NULL)");

mDownloadPath = pd.mAppPath + "download/";
File dir_file = new File(pd.mAppPath + "download/");
if(!dir_file.exists())
dir_file.mkdir();
}

public void saveHtml(final String id, final String title) {
if(isHtmlSaved(id))
return;

aq.ajax(URL+id, String.class, new AjaxCallback() {
@Override
public void callback(String url, String html, AjaxStatus status) {
File dir_file = new File(mDownloadPath + id);
if(!dir_file.exists())
dir_file.mkdir();

Pattern pattern = Pattern.compile("( <=src=\")[^\"]+( =\")");
Matcher matcher = pattern.matcher(html);
StringBuffer sb = new StringBuffer();
while(matcher.find()){
downloadPic(id, matcher.group(0));
matcher.appendReplacement(sb, formatPath(matcher.group(0)));
}
matcher.appendTail(sb);
html = sb.toString();

writeHtml(id, title, html);
}
});
}

private void downloadPic(String id, String url) {
File pic_file = new File(mDownloadPath + id + "/" + formatPath(url));
aq.download(url, pic_file, new AjaxCallback() {
@Override
public void callback(String url, final File file, AjaxStatus status) {
}
});
}

private void writeHtml(String id, String title, String html) {
File html_file = new File(mDownloadPath + id + "/index.html");
FileOutputStream fos = null;
try {
fos=new FileOutputStream(html_file);
fos.write(html.getBytes());
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
fos.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}

ContentValues values = new ContentValues();
values.put("content_id", id);
values.put("title", title);
mDB.insert("download_html", "_id", values);
}

public boolean isHtmlSaved(String id) {
File file = new File(mDownloadPath + id);
if(file.exists()) {
file = new File(mDownloadPath + id + "/index.html");
if(file.exists())
return true;
}
deleteHtml(id);
return false;
}

public String getTitle(String id) {
Cursor c = mDB.rawQuery("select * from download_html where content_id= ", new String[]{id});
if(c.getCount() == 0)
return null;

c.moveToFirst();
int index1 = c.getColumnIndex("title");

return c.getString(index1);
}

public ArrayList getHtmlList() {
Cursor c = mDB.rawQuery("select * from download_html", null);
ArrayList list = new ArrayList();
if(c.getCount() != 0) {
c.mov

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ActionBarSherlock实现自定义扁平.. 下一篇C#与Java实例化对象时的差异

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: