首页 > 代码库 > android中的HttpUrlConnection的使用之二

android中的HttpUrlConnection的使用之二

httpUrlConnection主要用于网络传输当中,前面已经提及到了使用HttpUrlConnection来加载一个网站,这里我记录一下:用它在网络上下载一张图片并且加载到imageview当中。我们需要注意的是:当前很多网站上的图片传输的模式主要分两种:1.一是加密传输,使用HttpsUrlConnection进行链接;2.而是非加密传输,使用HttpUrlConnection来传输。代码如下(非加密传输):

xml代码

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     tools:context="com.example.android_http2.MainActivity" > 6     <ImageView  7         android:layout_gravity="center" 8         android:id="@+id/imageview" 9         android:layout_width="wrap_content"10         android:layout_height="wrap_content"11         />12 13 </LinearLayout>

Java代码

首先创建了一个MainActivity类,来对ui进行更新的操作。

 1 package com.example.android_http2; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.widget.ImageView; 7  8 public class MainActivity extends Activity { 9     private ImageView imageview = null;10     private Handler handler = new Handler();11     @Override12     protected void onCreate(Bundle savedInstanceState) {13         super.onCreate(savedInstanceState);14         setContentView(R.layout.activity_main);15         imageview = (ImageView) findViewById(R.id.imageview);16         new HttpThread("http://img.mp.itc.cn/upload/20160416/5cbd639a2bbf41ffa68147df01254444_th.jpg", imageview, handler).start();17     }18 19 }

其次,创建一个线程类,来进行异步下载的功能。将网络上的代码先下载到本地上去,然后在用handler来通知主线程更新ui。

  1 package com.example.android_http2;  2   3 import java.io.File;  4 import java.io.FileNotFoundException;  5 import java.io.FileOutputStream;  6 import java.io.IOException;  7 import java.io.InputStream;  8 import java.net.HttpURLConnection;  9 import java.net.MalformedURLException; 10 import java.net.URL; 11  12 import javax.net.ssl.HttpsURLConnection; 13  14 import android.graphics.Bitmap; 15 import android.graphics.BitmapFactory; 16 import android.os.Environment; 17 import android.os.Handler; 18 import android.util.Log; 19 import android.widget.ImageView; 20  21 public class HttpThread extends Thread{ 22     private String url = null; 23     private ImageView imageview = null; 24     private Handler handler = null; 25     public HttpThread (String url, ImageView imageview, Handler handler) 26     { 27         this.handler = handler; 28         this.imageview = imageview; 29         this.url = url; 30     } 31     public void run() { 32         HttpURLConnection httpurlconnection = null; 33         try { 34             URL url = new URL(this.url); 35             httpurlconnection = (HttpURLConnection) url.openConnection(); 36         } catch (MalformedURLException e) { 37             // TODO Auto-generated catch block 38             e.printStackTrace(); 39         } catch (IOException e) { 40             // TODO Auto-generated catch block 41             e.printStackTrace(); 42         } 43         InputStream in = null; 44         try { 45             httpurlconnection.setReadTimeout(5000); 46             //允许获得输入流 47             httpurlconnection.setDoInput(true); 48             in = httpurlconnection.getInputStream(); 49         } catch (IOException e1) { 50             // TODO Auto-generated catch block 51             e1.printStackTrace(); 52         } 53         FileOutputStream out = null; 54         File downfile = null; 55         //判断当前的内存卡是否可以用 56         Log.i("main", "我进来没1?"); 57         File file = null; 58         if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 59         { 60             Log.i("main", "我进来没?"); 61             file = new File(Environment.getExternalStorageDirectory().toString() + File.separator + "imageviewdown" + File.separator + "image.jpg"); 62             if(!file.getParentFile().exists()) 63             { 64                 file.getParentFile().mkdirs(); 65                  66             } 67             else if(!file.exists()) 68             { 69                 Log.i("main", "我进来没?  62"); 70                 try { 71                     file.createNewFile(); 72                 } catch (IOException e) { 73                     // TODO Auto-generated catch block 74                     e.printStackTrace(); 75                 } 76             } 77             try { 78                 out = new FileOutputStream(file); 79             } catch (FileNotFoundException e) { 80                 Log.i("main", "异常没?"); 81                 e.printStackTrace(); 82             } 83         } 84         byte buff[] = new byte[2 * 1024]; 85         int len = 0; 86         try { 87             while((len = in.read(buff)) != -1) 88             { 89                 out.write(buff, 0,len); 90             } 91         } catch (IOException e) { 92             // TODO Auto-generated catch block 93             e.printStackTrace(); 94         } 95         //将下载在本地的图片加载在一个bitmap当中来 96         final Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 97         Log.i("main", file.getAbsolutePath()); 98         //通知主线程来更新ui 99         handler.post(new Runnable() {100             public void run() {101                 imageview.setImageBitmap(bitmap);102             }103         });104     }105 106 }

 

android中的HttpUrlConnection的使用之二