国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > Android之断点续传下载

Android之断点续传下载

来源:程序员人生   发布时间:2014-11-13 08:25:06 阅读次数:1889次

今天学习了Android开发中比较难的1个环节,就是断点续传下载,很多人看到这个标题就感觉头大,的确,如果没有良好的逻辑思惟,这块的确很难弄明白。下面我就将自己学到的知识和1些见解写下供那些在这个环节还烦恼的人参考。这里我以下载mp3文件为例。

断点续传下载,顾名思义,那就是我们在1次下载未结束时,退出下载,第2次下载时会接着第1次下载的进度继续下载。那末怎样记录第1次下载的数据呢,这里肯定就要用到http://www.wfuyu.com/db/了。下面就是我创建http://www.wfuyu.com/db/的1个SQLiteOpenHelper类。用来首次运行时创建http://www.wfuyu.com/db/。

DBHelper类:

复制代码
1 package cn.yj3g.DBHelper; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 import android.database.sqlite.SQLiteOpenHelper; 6 7 /** 8 * 建立1个http://www.wfuyu.com/db/帮助类 9 */ 10 public class DBHelper extends SQLiteOpenHelper { 11 //download.db-->http://www.wfuyu.com/db/名 12 public DBHelper(Context context) { 13 super(context, "download.db", null, 1); 14 } 15 16 /** 17 * 在download.dbhttp://www.wfuyu.com/db/下创建1个download_info表存储下载信息 18 */ 19 @Override 20 public void onCreate(SQLiteDatabase db) { 21 db.execSQL("create table download_info(_id integer PRIMARY KEY AUTOINCREMENT, thread_id integer, " 22 + "start_pos integer, end_pos integer, compelete_size integer,url char)"); 23 } 24 @Override 25 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 26 27 } 28 29 }
复制代码

下面来看主界面的布局,在这里,我只设计了1个ListView来显示下载的音乐的名称,和1个开始下载按钮和1个暂停按钮。

布局文件以下:

main.xml:

复制代码
1 <?xml version="1.0" encoding="utf⑻"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 android:id="@+id/llRoot"> 7 <ListView android:id="@android:id/list" 8 android:layout_width="fill_parent" 9 android:layout_height="fill_parent"> 10 </ListView> 11 </LinearLayout>
复制代码

list_item.xml:

复制代码
1 <?xml version="1.0" encoding="utf⑻"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="wrap_content"> 6 <LinearLayout 7 android:orientation="horizontal" 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:layout_marginBottom="5dip"> 11 <TextView 12 android:layout_width="fill_parent" 13 android:layout_height="wrap_content" 14 android:layout_weight="1" 15 android:id="@+id/tv_resouce_name"/> 16 <Button 17 android:layout_width="fill_parent" 18 android:layout_height="wrap_content" 19 android:layout_weight="1" 20 android:text="下载" 21 android:id="@+id/btn_start" 22 android:onClick="startDownload"/> 23 <Button 24 android:layout_width="fill_parent" 25 android:layout_height="wrap_content" 26 android:layout_weight="1" 27 android:text="暂停" 28 android:id="@+id/btn_pause" 29 android:onClick="pauseDownload"/> 30 </LinearLayout> 31 </LinearLayout>
复制代码

主界面运行效果以下:

下面我们来看具体实现下载的方法。首先,我们要定义1个记录在下载时各个时期的数据的类,这里我创建了1个DownloadInfo类来记录。代码以下:

DownloadInfo:

复制代码
1 package cn.yj3g.entity; 2 /** 3 *创建1个下载信息的实体类 4 */ 5 public class DownloadInfo { 6 private int threadId;//下载器id 7 private int startPos;//开始点 8 private int endPos;//结束点 9 private int compeleteSize;//完成度 10 private String url;//下载器网络标识 11 public DownloadInfo(int threadId, int startPos, int endPos, 12 int compeleteSize,String url) { 13 this.threadId = threadId; 14 this.startPos = startPos; 15 this.endPos = endPos; 16 this.compeleteSize = compeleteSize; 17 this.url=url; 18 } 19 public DownloadInfo() { 20 } 21 public String getUrl() { 22 return url; 23 } 24 public void setUrl(String url) { 25 this.url = url; 26 } 27 public int getThreadId() { 28 return threadId; 29 } 30 public void setThreadId(int threadId) { 31 this.threadId = threadId; 32 } 33 public int getStartPos() { 34 return startPos; 35 } 36 public void setStartPos(int startPos) { 37 this.startPos = startPos; 38 } 39 public int getEndPos() { 40 return endPos; 41 } 42 public void setEndPos(int endPos) { 43 this.endPos = endPos; 44 } 45 public int getCompeleteSize() { 46 return compeleteSize; 47 } 48 public void setCompeleteSize(int compeleteSize) { 49 this.compeleteSize = compeleteSize; 50 } 51 52 @Override 53 public String toString() { 54 return "DownloadInfo [threadId=" + threadId 55 + ", startPos=" + startPos + ", endPos=" + endPos 56 + ", compeleteSize=" + compeleteSize +"]"; 57 } 58 }
复制代码

在下载时,我们有进度条来显示进度,怎样肯定进度条的进度,大小和起始位置呢?这里我定义了1个LoadInfo类来记录下载器详细信息。代码以下:

LoadInfo:

复制代码
1 package cn.yj3g.entity; 2 /** 3 *自定义的1个记载下载器详细信息的类 4 */ 5 public class LoadInfo { 6 public int fileSize;//文件大小 7 private int complete;//完成度 8 private String urlstring;//下载器标识 9 public LoadInfo(int fileSize, int complete, String urlstring) { 10 this.fileSize = fileSize; 11 this.complete = complete; 12 this.urlstring = urlstring; 13 } 14 public LoadInfo() { 15 } 16 public int getFileSize() { 17 return fileSize; 18 } 19 public void setFileSize(int fileSize) { 20 this.fileSize = fileSize; 21 } 22 public int getComplete() { 23 return complete; 24 } <
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生