• Android简易实战教程--第二十五话《网络图片查看器》


    访问网络已经有了很成熟的框架。这一篇只是介绍一下HttpURLConnection的简单用法,以及里面的”注意点”。这一篇可以复习或者学习HttpURLConnection、handler、以及Bitmap保存图片。

    需求:点击按钮,访问一张网络图片显示。

    布局很简单,只需要一个按钮一个ImagetView:

       <Button 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="下载图片"
            android:onClick="click"
            />
        <ImageView
            android:id="@+id/iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    下面是主程序的代码,做出了逐行解释。所以不再赘述。如下:

    package com.itydl.imageviewer;
    
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.view.Menu;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
    	static ImageView iv;
    	static MainActivity ma;
    	static Handler handler = new Handler(){
    		//此方法在主线程中调用,可以用来刷新ui
    		public void handleMessage(android.os.Message msg) {
    			//处理消息时,需要知道到底是成功的消息,还是失败的消息
    			switch (msg.what) {
    			case 1:
    				//把位图对象显示至imageview
    				iv.setImageBitmap((Bitmap)msg.obj);
    				break;
    
    			case 0:
    				Toast.makeText(ma, "请求失败", 0).show();
    				break;
    			}
    			
    		}
    	};
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		iv = (ImageView) findViewById(R.id.iv);
    		ma = this;
    	}
    
    	//点击按钮触发
    	public void click(View v){
    		Thread t = new Thread(){
    			@Override
    			public void run() {
    				//下载图片
    				//1.确定网址
    				String path = "http://192.168.1.105:8080/meinv.jpg";
    				try {
    					//2.把网址封装成一个url对象
    					URL url = new URL(path);
    					//3.获取客户端和服务器的连接对象,此时还没有建立连接
    					HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    					//4.对连接对象进行初始化
    					//设置请求方法,注意大写
    					conn.setRequestMethod("GET");
    					//设置连接超时
    					conn.setConnectTimeout(5000);
    					//设置读取超时
    					conn.setReadTimeout(5000);
    					//5.发送请求,与服务器建立连接
    					conn.connect();
    					//如果响应码为200,说明请求成功
    					if(conn.getResponseCode() == 200){
    						//获取服务器响应头中的流,流里的数据就是客户端请求的数据
    						InputStream is = conn.getInputStream();
    						//直接读取出流里的数据,通过输入流并构造成位图Bitmap对象。
    						Bitmap bm = BitmapFactory.decodeStream(is);
    						
    						//注意!程序崩溃。子线程不可更新UI
    //						ImageView iv = (ImageView) findViewById(R.id.iv);
    //						//把位图对象显示至imageview
    //						iv.setImageBitmap(bm);
    						//使用Handler机制
    						Message msg = new Message();
    						//消息对象可以携带数据
    						msg.obj = bm;
    						msg.what = 1;
    						//把消息发送至主线程的消息队列
    						handler.sendMessage(msg);
    						
    					}
    					else{
    						//注意!程序崩溃。子线程不可更新UI
    //						Toast.makeText(MainActivity.this, "请求失败", 0).show();
    						//使用Handler机制
    						Message msg = handler.obtainMessage();
    						msg.what = 0;
    						handler.sendMessage(msg);
    					}
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		};
    		t.start();
    		
    	}
    
    }
    

    接下来来看一下美女长什么样子吧!!




    虽然很简单,但是有三个地方再唠叨一下:

    Bitmap bm = BitmapFactory.decodeStream(is);//直接获取位图

    iv.setImageBitmap((Bitmap)msg.obj);//直接位图放入ImageView

    <uses-permission android:name="android.permission.INTERNET"/>//网略权限

    Handler机制的简单用法。

    欢迎关注本博客点击打开链接  http://blog.csdn.net/qq_32059827,每天花上5分钟,阅读一篇有趣的安卓小文哦。

  • 相关阅读:
    SQL复杂查询和视图(2)
    SQL复杂查询和视图
    SQL语言概述
    元组演算与关系代数关系
    关系的元组演算
    线索二叉树
    二叉树的遍历
    树的基本概念
    【支付专区】之微信支付构建请求参数xml
    【支付专区】之微信支付请求数据签名
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299603.html
Copyright © 2020-2023  润新知