Android多文件断点续传(二)——实现数据库储存下载信息
来源:互联网 发布:网络调研公司 编辑:程序博客网 时间:2024/06/14 13:30
上一篇中我们主要介绍了数据的封装和界面的简单实现,如果你还没阅读过,建议先阅读上一篇Android多文件断点续传(一)——数据封装以及界面实现。接着我们还需要先将数据库准备好,这里用了Android自带的SQLite,对SQLite的使用一般都可以按照固定模版来实现的,具体接着往下看。
一.创建DBHelper
/** * Created by kun on 2016/11/10. */public class DBHelper extends SQLiteOpenHelper{ private static final String DB_NAME = "download.db"; private static DBHelper dbHelper = null; public static DBHelper getInstance(Context context){ if(dbHelper==null) dbHelper = new DBHelper(context); return dbHelper; } private DBHelper(Context context) { super(context, DB_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { String sql = "create table thread_info (_id integer primary key autoincrement," + "thread_id integer,url text,start integer,end integer,finished integer)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
由于我们要实现的功能是多文件并且分段下载的功能,因此会涉及到多线程,为了避免在数据库读取的过程中出现问题,在这里我们就使用单例模式创建DBHelper 。
上面代码中我们创建了一个名为download.db的数据库,并在其中创建了一张表thread_info,里面的字段有_id ,thread_id ,url ,start ,end , finished。用于保存下载线程中的下载信息。
如果对数据库更新有要求的,可以继续实现onUpgrade方法。
二. 定义ThreadDao
/** * Created by kun on 2016/11/10. */public interface ThreadDao { /** * 插入下载线程信息 * @param threadBean */ void insertThread(ThreadBean threadBean); /** * 更新下载线程信息 * @param url * @param thread_id * @param finished */ void updateThread(String url ,int thread_id,int finished); /** * 删除下载线程 * @param url */ void deleteThread(String url); /** * 获取下载线程 * @param url * @return */ List<ThreadBean> getThreads(String url); /** * 判断下载线程是否存在 * @param url * @param thread_id * @return */ boolean isExists(String url ,int thread_id);}
在这里我们定义了一个接口,里面主要有5个方法,具体看注释就可以了。
三.实现ThreadDao
/** * Created by kun on 2016/11/10. */public class ThreadDaoImpl implements ThreadDao { private DBHelper dbHelper; public ThreadDaoImpl(Context context){ dbHelper = DBHelper.getInstance(context); } @Override public synchronized void insertThread(ThreadBean threadBean) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("insert into thread_info ( thread_id, url, start ,end, finished) values (?,?,?,?,?)" ,new Object[]{threadBean.getId(),threadBean.getUrl(),threadBean.getStart(),threadBean.getEnd(),threadBean.getFinished()}); db.close(); } @Override public synchronized void updateThread(String url, int thread_id, int finished) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("update thread_info set finished = ? where url = ? and thread_id = ?" ,new Object[]{finished,url,thread_id}); db.close(); } @Override public void deleteThread(String url) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("delete from thread_info where url = ?",new Object[]{url}); db.close(); } @Override public List<ThreadBean> getThreads(String url) { SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from thread_info where url = ?",new String[]{url}); List<ThreadBean> threadBeanList = new ArrayList<>(); while (cursor.moveToNext()){ ThreadBean bean = new ThreadBean(); bean.setId(cursor.getInt(cursor.getColumnIndex("thread_id"))); bean.setUrl(cursor.getString(cursor.getColumnIndex("url"))); bean.setStart(cursor.getInt(cursor.getColumnIndex("start"))); bean.setEnd(cursor.getInt(cursor.getColumnIndex("end"))); bean.setFinished(cursor.getInt(cursor.getColumnIndex("finished"))); threadBeanList.add(bean); } cursor.close(); db.close(); return threadBeanList; } @Override public boolean isExists(String url, int thread_id) { SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from thread_info where url = ? and thread_id = ?", new String[]{url,thread_id+""}); boolean exists = cursor.moveToNext(); cursor.close(); db.close(); return exists; }}
我们创建了ThreadDaoImpl来实现ThreadDao接口,通过DBHelper获取到可写或可读的数据库来实现增删查改,这里需要注意的是在写的操作方法上都加上了同步锁,目的还是一样为了避免在多线程情况下数据库读取的过程中出现问题,另外还需要注意的就是SQL的语句不要写错了。
处理完成数据库后,接着就是实现断点续传了,欢迎阅读下一篇。
Android多文件断点续传(三)——实现文件断点续传
0 0
- Android多文件断点续传(二)——实现数据库储存下载信息
- Android文件下载(实现断点续传)
- Android文件下载(实现断点续传)
- Android文件下载(实现断点续传)
- Android实现文件下载断点续传
- Android多文件断点续传(三)——实现文件断点续传
- Android实现网络多线程断点续传下载(二)
- Android okhttp+rxjava实现多文件下载和断点续传
- Android okhttp+rxjava实现多文件下载和断点续传
- Android okhttp+rxjava实现多文件下载和断点续传
- Android文件下载(实现断点续传)的学习
- Android实现断点续传下载文件,网络编程
- 文件下载(断点续传)——dataTask
- 断点续传实现文件下载
- Android数据储存——文件储存
- android断点续传下载文件
- NSURLSession下载文件—断点续传
- NSURLSession下载文件—断点续传
- 2016.11.11 jq(复习1 选择器 事件 效果)
- Intellij idea + Spring boot + Thymeleaf + MySQL
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- LeetCode 452. Minimum Number of Arrows to Burst Balloons
- css3实现六边形列表
- Android多文件断点续传(二)——实现数据库储存下载信息
- 关于IOS 高德地图的一些问题
- C++文件读写详解(ofstream,ifstream,fstream)
- mybatis在xml文件中处理大于号小于号的方法
- QT 利用QPainter绘图的坐标系转换
- 在tomcat中配置SSL-基础学习笔记
- 洛谷P1654 产品排序:贪心+DP
- maven POM.xml 标签详解
- mysql 基本操作