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

    下面是布局文件

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:tools="http://schemas.android.com/tools"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent"
     6 
     7     tools:context="com.wuxianedu.httpdemo.Main2Activity">
     8 
     9     <Button android:id="@+id/but_id" android:text="下载APP"
    10         android:layout_width="wrap_content"
    11         android:layout_height="wrap_content" />
    12 </RelativeLayout>
  • 相关阅读:
    2. 逻辑运算
    1. 条件
    6. 可变不可变类型
    5. 基本运算符
    4. 与用户交互
    12 .命名的EIGRP和EIGRP v6
    11. EIGRP路由SIA
    Redis 快速入门 -- Redis 快速入门(2)
    Redis 快速入门 -- Redis教程(1)
    Redis 百度百科
  • 原文地址:https://www.cnblogs.com/langfei8818/p/6055674.html
Copyright © 2011-2022 走看看