android 显示下载进度,Android之ProgressBar即时显示下载进度详解

这里利用 ProgressBar 即时显示下载进度。

途中碰到的问题:

1、主线程中不能打开 URL,和只能在主线程中使用 Toast 等

2、子线程不能修改 UI

3、允许网络协议

4、暂停下载和继续下载

........

fragment_main 布局文件

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.dragon.android.textbar.MainActivity$PlaceholderFragment" >

android:id="@+id/progressBar1"

style="?android:attr/progressBarStyleHorizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:max="100"

android:progress="0"

android:indeterminate="true"/>

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true"

android:onClick="startLoad"

android:layout_marginTop="86dp"

android:background="#009FEE"

android:text="@string/start"

android:textColor="#ffffff" />

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_above="@+id/progressBar1"

android:background="@null"

android:layout_alignParentLeft="true" />

strings.xml

hwdownload

Hello world!

Settings

开始

暂停

继续

(问题3)在 AndroidManifest 文件中配置

MainActivity(问题1、2)

package com.dragon.android.textbar;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.ProgressBar;

import android.widget.TextView;

import android.widget.Toast;

/**

* 只有创建一个 View 的线程才可以改变这个 View 的UI!!! 主线程也叫 UI 线程

*/

public class MainActivity extends Activity {

private ProgressBar progressBar1;

private Button button1;

private TextView textView1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.fragment_main);

progressBar1 = (ProgressBar) findViewById(R.id.progressBar1);

button1 = (Button) findViewById(R.id.button1);

textView1 = (TextView) findViewById(R.id.textView1);

}

public void startLoad(View view) {

String text = (String) button1.getText();

// 设置按钮内容 ----并没有用...

button1.setText(text.equals(getResources().getString(R.string.start)) ? R.string.stop

: (text.equals(getResources().getString(R.string.stop)) ? R.string.contin

: R.string.stop));

progressBar1.setIndeterminate(false);

new Thread(new Runnable() {

private int percent;

@Override

public void run() {

try {

// 打开 URL 必须在子线程

URL url = new URL(

"http://b.zol-img.com.cn/sjbizhi/images/9/540x960/1472549276394.jpg");

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

// conn.setRequestMethod("GET");

// conn.setReadTimeout(5000);

// conn.setConnectTimeout(5000);

int contentLength = conn.getContentLength();

if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {

InputStream is = conn.getInputStream();

byte[] buffer = new byte[1024];

int len = -1;

int sum = 0;

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

sum += len;

// 注意强转方式,防止一直为0

percent = (int) (100.0 * sum / contentLength);

// 在主线程上运行的子线程

runOnUiThread(new Runnable() {

@Override

public void run() {

progressBar1.setProgress(percent);

textView1.setText(percent + "%");

if (percent == progressBar1.getMax()) {

Toast.makeText(MainActivity.this,

"下载完成!", Toast.LENGTH_SHORT)

.show();

}

}

});

}

is.close();

conn.disconnect();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}).start();

}

}

**************然而并没有解决问题4,要用断点续传,但是还不会存放assets资源.....***************

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值