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     @Override
12     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 }
时间: 2024-10-02 07:54:54

android中的HttpUrlConnection的使用之二的相关文章

android中的HttpUrlConnection的使用之一

在我们之前学习Java的网络编程当中,我们已经见过HttpUrlConnection类的使用.HttpUrlConnect在Java是一个支持http特定的功能一个类,在许多的网络编程经常使用到它.今天我在这里记录的是android中使用HttpUrlConnection,之前我还学过使用异步加载来加载一个网站,它使用的原理同样是多线程,但是它使用的是用json来解析一个网站,而不是直接使用域名也就是网址来解析一个网站,而将要介绍的HttpUrlConnection是使用域名来解析一个网站的,当

Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识

处理特征数据 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26240241 输入文件:  1. 归一化后的特征文件, 第1列是标签, 其余列是特征; 2. 特征最大值向量文件: 前3列是标准格式, 其余列是最大值; 输出文件: 1. 符合SVM训练数据的特征格式; 2. Mat存储的标准XML文件; 代码: /* 处理特征数据程序 By C.L.Wang 数据格式: 特征数据: 第1列是标签, 其余列是特征; 最大

android中的HttpURLConnection和HttpClient实现app与pc数据交互

自学android的这几天很辛苦,但是很满足,因为每当学到一点点知识点都会觉得很开心,觉得今天是特别有意义的,可能这个就是一种莫名的热爱吧. 下面来说说今天学习的HttpURLConnection和HttpClient的区别吧,其实这2种都能进行客户端和服务器的数据交互,只是HttpClient封装的更完全. 先看下案例吧 第一种HttpURLConnection访问服务器: 客服端代码: package com.example.demo01; import java.io.IOExceptio

Android中的软件安全和逆向分析[二]—apk反破解技术与安全保护机制

在Android应用开发中,当我们开发完软件之后,我们不希望别人能够反编译破解我们的应用程序,不能修改我们的代码逻辑.实际上,在应用程序的安全机制考虑中,我们希望自己的应用程序安全性高,通过各种加密操作等来增大竞争对手的反编译破解成本.设想,竞争对手开发一个同样的应用程序需要10天,而破解我们的软件程序需要100天,那么势必会打消黑客程序员破解我们应用程序的念头.如何增加对手的破解成本,就需要考验我们应用程序的安全性有多高,加密技术有多强.一个优秀的应用程序,不仅能为用户带来利益,同时也能保护自

Android中,HttpURLConnection与Apache的DefaultHttpClient哪个更被推荐使用?

在Android中,请求网络资源的方式包含了:HttpURLConnection和Apache的DefaultHttpClient.那么,这两个方式哪个更被推荐使用呢?Android官方文档为我们推荐HttpURLConnection,而理由是什么呢? 在Android 4.0,为HttpURLConnection增加了一个response cache(响应缓存),这是一个很好的减少http请求次数的机制,Android官方推荐使用HttpURLConnection而不是Apache的Defau

Android笔记——Android中数据的存储方式(二)

我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率.如果学过JavaWeb的朋友,首先可能想到的是数据库.当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android笔记——Android中数据的存储方式(一) 提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件.SQL

Android中使用HttpURLConnection实现GET POST JSON数据与下载图片

Android6.0中把Apache HTTP Client所有的包与类都标记为deprecated不再建议使用 所有跟HTTP相关的数据请求与提交操作都通过HttpURLConnection类实现,现实是 很多Android开发者一直都Apache HTTP Client来做andoird客户端与后台HTTP接口数 据交互,本人刚刚用HttpURLConnection做了一个android的APP,不小心踩到了几个 坑,总结下最常用的就通过HttpURLConnection来POST提交JSO

[Android基础]Android中使用HttpURLConnection

HttpURLConnection继承了URLConnection,因此也能够向指定站点发送GET请求.POST请求.它在URLConnetion的基础上提供了例如以下便捷的方法. int getResponseCode():获取server的响应代码. String getResponseMessage():获取server的訪问信息. String getRequestMethod():获取发送请求的方法. void setRequestMethod(String method):设置发送请

在Android中Intent的概念及应用(二)——Intent过滤器相关选项

一.如果多个Activity拥有同一个Intent Action,启动时用同一个Action启动会是什么情况? 如何指定某一个Activity启动? 在多个Activity拥有同一个Intent Action的情况下,如若想启动某一指定Activity,则在该<intent-filter> 中添加<data android:scheme="app"/>.而且,将启动的代码写为: startActivity(new Intent("com.w.learn