• 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>
  • 相关阅读:
    免费的视频、音频转文本
    Errors are values
    Codebase Refactoring (with help from Go)
    Golang中的坑二
    Cleaner, more elegant, and wrong(msdn blog)
    Cleaner, more elegant, and wrong(翻译)
    Cleaner, more elegant, and harder to recognize(翻译)
    vue控制父子组件渲染顺序
    computed 和 watch 组合使用,监听数据全局数据状态
    webstorm破解方法
  • 原文地址:https://www.cnblogs.com/langfei8818/p/6055674.html
Copyright © 2020-2023  润新知