Android学习笔记--使用Apache HttpClient实现网络下载效果,附带进度条显示

归志宁无五亩园,读书本意在元元。这篇文章主要讲述Android学习笔记--使用Apache HttpClient实现网络下载效果,附带进度条显示相关的知识,希望能为你提供帮助。
今天学习 了Apache 写了一个网络下载的效果,代码如下,代码中我已经写了很详细的注释了,相信大家都能看懂

1 http://m.blog.csdn.net/article/details?id=52927536 2 3 4 package com.wuxianedu.httpdemo; 5 6 import android.app.ProgressDialog; 7 import android.content.Intent; 8 import android.net.Uri; 9 import android.os.AsyncTask; 10 import android.support.v7.app.AppCompatActivity; 11 import android.os.Bundle; 12 import android.view.View; 13 import android.widget.Button; 14 import android.widget.Toast; 15 16 import org.apache.http.HttpResponse; 17 import org.apache.http.client.HttpClient; 18 import org.apache.http.client.methods.HttpGet; 19 import org.apache.http.impl.client.DefaultHttpClient; 20 21 import java.io.FileOutputStream; 22 import java.io.IOException; 23 import java.io.InputStream; 24 import java.io.OutputStream; 25 26 public class Main2Activity extends AppCompatActivity implements View.OnClickListener{ 27 28private Button button; 29private ProgressDialog dialog; 30private String path; 31private final int TA_C = 0; //成功 32private final int TA_S = -1; //失败 33 34@Override 35protected void onCreate(Bundle savedInstanceState) { 36super.onCreate(savedInstanceState); 37setContentView(R.layout.activity_main2); 38button = (Button) findViewById(R.id.but_id); 39button.setOnClickListener(this); 40} 41 42@Override 43public void onClick(View view) { 44switch (view.getId()){ 45case R.id.but_id: 46new Myhui().execute("http://g.pc6.com/0942666043/apk/4001_ZMJ2016_04_20161028_rnikgd.apk"); 47break; 48} 49} 50 51class Myhui extends AsyncTask< String,Integer,Integer> { 52//异步任务执行前的操作 53@Override 54protected void onPreExecute() { 55dialog = new ProgressDialog(Main2Activity.this); 56dialog.setTitle("正在下载"); 57dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 58dialog.show(); 59super.onPreExecute(); 60} 61//更新进度的方法 调用使用publishProgress 62@Override 63protected void onProgressUpdate(Integer... values) { 64dialog.setProgress(values[0]); 65super.onProgressUpdate(values); 66} 67//任务执行中方法 68@Override 69protected Integer doInBackground(String... strings) { 70//构建URL地址链接 71HttpGet httpGet = new HttpGet(strings[0]); 72//建立客户端链接 73HttpClient httpClient = new DefaultHttpClient(); 74try { 75//获取服务器响应的数据 76HttpResponse response = httpClient.execute(httpGet); 77//获取状态码 78int code = response.getStatusLine().getStatusCode(); 79switch (code){ 80case 201: 81case 200: 82//获取文件最大值 83int zuimax = (int) response.getEntity().getContentLength(); 84//给进度条赋最大值 85dialog.setMax(zuimax); 86//获取文件的输入流 87InputStream is = response.getEntity().getContent(); 88//获取储存地址 89path = getExternalCacheDir().getParent()+"/tanchishe.apk"; 90//获取文件的输出流,传入写入文件的地址 91OutputStream os = new FileOutputStream(path); 92int length; 93//进度条进度 94int jindu = 0; 95byte[] bytes = new byte[1024]; 96while ((length = is.read(bytes))!= -1){ 97os.write(bytes,0,length); 98jindu+=length; 99//启动赋值方法 100publishProgress(jindu); 101} 102//关闭流 103is.close(); 104os.flush(); 105os.close(); 106return TA_C; 107case 401: 108break; 109} 110} catch (IOException e) { 111e.printStackTrace(); 112} 113return TA_S; 114} 115 116//任务结束方法 117@Override 118protected void onPostExecute(Integer integer) { 119//关闭进度条 120dialog.dismiss(); 121switch (integer){ 122case TA_C: 123Toast.makeText(Main2Activity.this, "下载成功了", Toast.LENGTH_SHORT).show(); 124setupApk(); 125break; 126case TA_S: 127Toast.makeText(Main2Activity.this, "下载失败了", Toast.LENGTH_SHORT).show(); 128break; 129} 130super.onPostExecute(integer); 131} 132} 133 134/** 135* 启动应用安装。 136*/ 137private void setupApk() { 138Intent intent = new Intent(Intent.ACTION_VIEW); 139//"file://"+文件路径。 140Uri uri = Uri.parse("file://"+ path); 141intent.setDataAndType(uri, "application/vnd.android.package-archive"); 142startActivity(intent); 143} 144 }

 
【Android学习笔记--使用Apache HttpClient实现网络下载效果,附带进度条显示】下面是布局文件
1 < ?xml version="1.0" encoding="utf-8"?> 2 < RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3xmlns:tools="http://schemas.android.com/tools" 4android:layout_width="match_parent" 5android:layout_height="match_parent" 6 7tools:context="com.wuxianedu.httpdemo.Main2Activity"> 8 9< Button android:id="@+id/but_id" android:text="下载APP" 10android:layout_width="wrap_content" 11android:layout_height="wrap_content" /> 12 < /RelativeLayout>

 

    推荐阅读