为了账号安全,请及时绑定邮箱和手机立即绑定

点击下载 程序崩溃

579818ab0001624e05000212.jpg

579818ac0001524505000191.jpg

  • ThreadDAOImpl.java

package db;


import java.util.ArrayList;

import java.util.List;


import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import entities.ThreadInfo;


public class ThreadDAOImpl implements ThreadDAO{


private DBHelper mHelper=null;

public ThreadDAOImpl(Context context){

mHelper=new DBHelper(context);

}

@Override

public void insertThread(ThreadInfo threadInfo) {

// TODO Auto-generated method stub

SQLiteDatabase db=mHelper.getWritableDatabase();

db.execSQL(

"insert into thread_info(thread_id,url,start,end,finished) values(?,?,?,?,?)",

new Object[]{threadInfo.getId(),threadInfo.getUrl(),threadInfo.getStart(),threadInfo.getEnd(),threadInfo.getFinished()});

db.close();

}

@Override

public void deleteThread(String url, int thread_id) {

// TODO Auto-generated method stub

SQLiteDatabase db=mHelper.getWritableDatabase();

db.execSQL(

"delete from thread_info where url=? and thread_id=?",

new Object[]{url,thread_id});

db.close();

}


@Override

public void updateThread(String url, int thread_id, int finished) {

SQLiteDatabase db=mHelper.getWritableDatabase();

db.execSQL(

"update thread_info set finished=? where url=? and thread_id=?",

new Object[]{finished,url,thread_id});

db.close();

}


@Override

public List<ThreadInfo> getThreads(String url) {

SQLiteDatabase db=mHelper.getWritableDatabase();

List<ThreadInfo> list=new ArrayList<ThreadInfo>();

Cursor cursor=

db.rawQuery("select * from thread_info where url=?", new String[]{url});

while(cursor.moveToNext()){

ThreadInfo thread=new ThreadInfo();

thread.setId(cursor.getInt(cursor.getColumnIndex("thread_id")));

thread.setUrl(cursor.getString(cursor.getColumnIndex("url")));

thread.setStart(cursor.getInt(cursor.getColumnIndex("start")));

thread.setEnd(cursor.getInt(cursor.getColumnIndex("end")));

thread.setFinished(cursor.getInt(cursor.getColumnIndex("finished")));

list.add(thread);

}

cursor.close();

db.close();

return list;

}


@Override

public boolean isExists(String url, int thread_id) {

// TODO Auto-generated method stub

SQLiteDatabase db=mHelper.getWritableDatabase();

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;

}


}



正在回答

1 回答

  • DownloadTask.java

package services;


import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.RandomAccessFile;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.Timer;

import java.util.TimerTask;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;


import org.apache.http.HttpStatus;


import android.content.Context;

import android.content.Intent;

import android.os.Message;

import android.os.Messenger;

import db.ThreadDAO;

import db.ThreadDAOImpl;

import entities.FileInfo;

import entities.ThreadInfo;


public class DownloadTask {

private Context mContext = null;

private FileInfo mFileInfo = null;

private ThreadDAO mDao = null;

private int mFinished = 0;

public boolean isPause = false;


public DownloadTask(Context mContext, FileInfo mFileInfo) {

this.mContext = mContext;

this.mFileInfo = mFileInfo;

mDao = new ThreadDAOImpl(mContext);

}


public void download() {


List<ThreadInfo> threadInfos = mDao.getThreads(mFileInfo.getUrl());

ThreadInfo threadInfo = null;

if (threadInfos.size() == 0) {

threadInfo = new ThreadInfo(0, mFileInfo.getUrl(), 0, mFileInfo.getLength(), 0);

} else {

threadInfo = threadInfos.get(0);

}

new DownloadThread(threadInfo).start();

}


class DownloadThread extends Thread {

private ThreadInfo mThreadInfo = null;


public DownloadThread(ThreadInfo mThreadInfo) {

this.mThreadInfo = mThreadInfo;

}


public void run() {

if (!mDao.isExists(mThreadInfo.getUrl(), mThreadInfo.getId())) {

mDao.insertThread(mThreadInfo);

}

HttpURLConnection conn = null;

RandomAccessFile raf = null;

InputStream input = null;

try {

URL url = new URL(mThreadInfo.getUrl());

conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(3000);

conn.setRequestMethod("GET");

int start = mThreadInfo.getStart() + mThreadInfo.getFinished();

conn.setRequestProperty("Range", "bytes=" + start + "-" + mThreadInfo.getEnd());

File file = new File(DownloadService.DOWNLOAD_PATH, mFileInfo.getFileName());

raf = new RandomAccessFile(file, "rwd");

raf.seek(start);

Intent intent = new Intent(DownloadService.ACTION_UPDATE);

mFinished += mThreadInfo.getFinished();

if (conn.getResponseCode() == HttpStatus.SC_PARTIAL_CONTENT) {


input = conn.getInputStream();

byte[] buffer = new byte[1024 * 4];

int len = -1;

long time = System.currentTimeMillis();

while ((len = input.read(buffer)) != -1) {

raf.write(buffer, 0, len);

mFinished += len;

if (System.currentTimeMillis() - time > 500) {

time = System.currentTimeMillis();

intent.putExtra("finished", mFinished * 100 / mFileInfo.getLength());

mContext.sendBroadcast(intent);

}

if (isPause) {

mDao.updateThread(mThreadInfo.getUrl(), mThreadInfo.getId(), mFinished);

return;

}

}

mDao.deleteThread(mThreadInfo.getUrl(), mThreadInfo.getId());

}

} catch (Exception e) {

e.printStackTrace();

} finally {


try {

raf.close();

conn.disconnect();

input.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}

}


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android-Service系列之断点续传下载
  • 参与学习       20444    人
  • 解答问题       87    个

想升职加薪么?本章课程你值得拥有,满满的干货,学起来吧

进入课程

点击下载 程序崩溃

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信