国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android文件下載進度條的實現代碼

2020-02-21 17:31:12
字體:
來源:轉載
供稿:網友

今天和武林小編在這里學習下載進度的實現吧,這段代碼是網上找的,自己做了些小改,通過模擬器測試。文件下載進度條控制(就是為了高清壁紙加個進度條),自己研究了好久,但是進度條只能顯示緩存寫入文件的進度,不能顯示下載進度。找了好久,終于找到一段用的代碼,所以記錄下來,大家分享下Android文件下載進度條的實現代碼。

main.xml:

?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
??? android:orientation="vertical"
??? android:layout_width="fill_parent"
??? android:layout_height="fill_parent"
??? >
<TextView? android:id="@+id/tv"
??? android:layout_width="fill_parent"
??? android:layout_height="wrap_content"
??? android:text=""
??? />
<ProgressBar android:id="@+id/down_pb"
?android:layout_width="fill_parent"
??? android:layout_height="wrap_content"
??? android:max="100"
??? style="?android:attr/progressBarStyleHorizontal" mce_style="?android:attr/progressBarStyleHorizontal"
/>
</LinearLayout>


main.java:

?

?

?


package com.pocketdigi.download;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import org.apache.http.client.ClientProtocolException;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class main extends Activity {
??? /** Called when the activity is first created. */
?ProgressBar pb;
?TextView tv;
?int?? fileSize;
?int?? downLoadFileSize;
?String fileEx,fileNa,filename;
?private Handler handler = new Handler()
?? {
???? @Override
???? public void handleMessage(Message msg)
???? {//定義一個Handler,用于處理下載線程與UI間通訊
?????? if (!Thread.currentThread().isInterrupted())
?????? {
???????? switch (msg.what)
???????? {
?????????? case 0:
???????????? pb.setMax(fileSize);
?????????? case 1:
???????????? pb.setProgress(downLoadFileSize);
???????????? int result = downLoadFileSize * 100 / fileSize;
???????????? tv.setText(result + "%");
???????????? break;
?????????? case 2:
???????????? Toast.makeText(main.this, "文件下載完成", 1).show();
???????????? break;
?????????? case -1:
???????????? String error = msg.getData().getString("error");
???????????? Toast.makeText(main.this, error, 1).show();
???????????? break;
???????? }
?????? }
?????? super.handleMessage(msg);
???? }
?? };
??? @Override
??? public void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.main);
??????? pb=(ProgressBar)findViewById(R.id.down_pb);
??????? tv=(TextView)findViewById(R.id.tv);
??????? new Thread(){
??????? ?public void run(){
??????? ??try {
?????down_file("http://wallpaper.pocketdigi.com/upload/1/bigImage/1284565196.jpg","/sdcard/");
?????//下載文件,參數:第一個URL,第二個存放路徑
????} catch (ClientProtocolException e) {
?????// TODO Auto-generated catch block
?????e.printStackTrace();
????} catch (IOException e) {
?????// TODO Auto-generated catch block
?????e.printStackTrace();
????}
??????? ?}
??????? }.start();
??? }
??? public void down_file(String url,String path) throws IOException{
??? ?//下載函數?? ?
??? ?filename=url.substring(url.lastIndexOf("/") + 1);
??? ?//獲取文件名
??? ?URL myURL = new URL(url);
??? ?URLConnection conn = myURL.openConnection();
??? ?conn.connect();
??? ?InputStream is = conn.getInputStream();
???? this.fileSize = conn.getContentLength();//根據響應獲取文件大小
???? if (this.fileSize <= 0) throw new RuntimeException("無法獲知文件大小 ");
???? if (is == null) throw new RuntimeException("stream is null");
???? FileOutputStream fos = new FileOutputStream(path+filename);
???? //把數據存入路徑+文件名
???? byte buf[] = new byte[1024];
???? downLoadFileSize = 0;
???? sendMsg(0);
???? do
?????? {
???? ?//循環讀取
???????? int numread = is.read(buf);
???????? if (numread == -1)
???????? {
?????????? break;
???????? }
???????? fos.write(buf, 0, numread);
???????? downLoadFileSize += numread;
???????? sendMsg(1);//更新進度條
?????? } while (true);
???? sendMsg(2);//通知下載完成
???? try
?????? {
???????? is.close();
?????? } catch (Exception ex)
?????? {
???????? Log.e("tag", "error: " + ex.getMessage(), ex);
?????? }
??? }
?private void sendMsg(int flag)
?{
???? Message msg = new Message();
???? msg.what = flag;
???? handler.sendMessage(msg);
?}?
}


大家看了以后就應該明白了,上面寫的是用一個循環來完成的這些事情,byte buf[] = new byte[1024];這句話中大家一定要寫1024,這個可不能改變呀。sendMsg(0);這句的括號里寫的是0,這個也要記得,是0而不是1.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连云港市| 威信县| 绥阳县| 武邑县| 西青区| 日喀则市| 富源县| 金川县| 武定县| 兴化市| 宜宾市| 沧源| 鄂温| 衡东县| 邯郸县| 乐都县| 通渭县| 公主岭市| 屏东县| 贵港市| 平湖市| 贞丰县| 郸城县| 科技| 枞阳县| 马龙县| 偃师市| 息烽县| 中山市| 调兵山市| 积石山| 嘉定区| 宁河县| 福泉市| 金塔县| 梅州市| 额敏县| 玛多县| 铜鼓县| 天柱县| 拉萨市|