Android之?dāng)帱c(diǎn)續(xù)傳下載
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-11-13 08:25:06 閱讀次數(shù):2063次
今天學(xué)習(xí)了Android開(kāi)發(fā)中比較難的1個(gè)環(huán)節(jié),就是斷點(diǎn)續(xù)傳下載,很多人看到這個(gè)標(biāo)題就感覺(jué)頭大,的確,如果沒(méi)有良好的邏輯思惟,這塊的確很難弄明白。下面我就將自己學(xué)到的知識(shí)和1些見(jiàn)解寫下供那些在這個(gè)環(huán)節(jié)還煩惱的人參考。這里我以下載mp3文件為例。
斷點(diǎn)續(xù)傳下載,顧名思義,那就是我們?cè)?次下載未結(jié)束時(shí),退出下載,第2次下載時(shí)會(huì)接著第1次下載的進(jìn)度繼續(xù)下載。那末怎樣記錄第1次下載的數(shù)據(jù)呢,這里肯定就要用到http://www.vxbq.cn/db/了。下面就是我創(chuàng)建http://www.vxbq.cn/db/的1個(gè)SQLiteOpenHelper類。用來(lái)首次運(yùn)行時(shí)創(chuàng)建http://www.vxbq.cn/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個(gè)http://www.vxbq.cn/db/幫助類
9 */
10 public class DBHelper extends SQLiteOpenHelper {
11 //download.db-->http://www.vxbq.cn/db/名
12 public DBHelper(Context context) {
13 super(context, "download.db", null, 1);
14 }
15
16 /**
17 * 在download.dbhttp://www.vxbq.cn/db/下創(chuàng)建1個(gè)download_info表存儲(chǔ)下載信息
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 }
下面來(lái)看主界面的布局,在這里,我只設(shè)計(jì)了1個(gè)ListView來(lái)顯示下載的音樂(lè)的名稱,和1個(gè)開(kāi)始下載按鈕和1個(gè)暫停按鈕。
布局文件以下:
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>

主界面運(yùn)行效果以下:

下面我們來(lái)看具體實(shí)現(xiàn)下載的方法。首先,我們要定義1個(gè)記錄在下載時(shí)各個(gè)時(shí)期的數(shù)據(jù)的類,這里我創(chuàng)建了1個(gè)DownloadInfo類來(lái)記錄。代碼以下:
DownloadInfo:

1 package cn.yj3g.entity;
2 /**
3 *創(chuàng)建1個(gè)下載信息的實(shí)體類
4 */
5 public class DownloadInfo {
6 private int threadId;//下載器id
7 private int startPos;//開(kāi)始點(diǎn)
8 private int endPos;//結(jié)束點(diǎn)
9 private int compeleteSize;//完成度
10 private String url;//下載器網(wǎng)絡(luò)標(biāo)識(shí)
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 }

在下載時(shí),我們有進(jìn)度條來(lái)顯示進(jìn)度,怎樣肯定進(jìn)度條的進(jìn)度,大小和起始位置呢?這里我定義了1個(gè)LoadInfo類來(lái)記錄下載器詳細(xì)信息。代碼以下:
LoadInfo:
1 package cn.yj3g.entity;
2 /**
3 *自定義的1個(gè)記載下載器詳細(xì)信息的類
4 */
5 public class LoadInfo {
6 public int fileSize;
//文件大小
7 private int complete;
//完成度
8 private String urlstring;
//下載器標(biāo)識(shí)
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 }
<
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
------分隔線----------------------------
------分隔線----------------------------