Welcome

首页 / 移动开发 / Android / Android之ProgressBar即时显示下载进度详解

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

途中碰到的问题: 

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

2、子线程不能修改 UI 

3、允许网络协议 

4、暂停下载和继续下载
  ........ 

fragment_main 布局文件 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"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" ><!-- prigressBar 进度条 --><!-- progress 当前进度 --><!-- indeterminate 不明确的默认false --><ProgressBarandroid: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"/><Buttonandroid: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" /><TextViewandroid: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" /></RelativeLayout>
strings.xml 
<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">hwdownload</string><string name="hello_world">Hello world!</string><string name="action_settings">Settings</string><string name="start">开始</string><string name="stop">暂停</string><string name="contin">继续</string></resources>
(问题3)在 AndroidManifest 文件中配置
 <!-- 请求网络权限 -->
    <uses-permission  android:name="android.permission.INTERNET"/>

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;@Overrideprotected 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;@Overridepublic 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;// 注意强转方式,防止一直为0percent = (int) (100.0 * sum / contentLength);// 在主线程上运行的子线程runOnUiThread(new Runnable() {@Overridepublic 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资源.....***************

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