软件编程
位置:首页>> 软件编程>> Android编程>> android利用消息机制获取网络图片

android利用消息机制获取网络图片

作者:ITqingliang  发布时间:2023-07-24 09:46:57 

标签:android,消息机制,图片

在前面都写到用AsyncTask来获取网络中的图片。其实利用消息机制也能获取网络中的图片,而且本人感觉用消息机制还是挺简单的。

消息机制的图解:

android利用消息机制获取网络图片  

下面就用看代码来理解上面的图片。

布局:activity_main.xml


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="cn.edu.huse.handle.MainActivity" >

<ImageView
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:id="@+id/iv_image" />
 <Button  
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:onClick="getImage"
   android:text="获取网络图片"
   android:layout_gravity="bottom|center"
   android:layout_marginBottom="20dp"/>

</FrameLayout>

MainActivity.java


package cn.edu.huse.handle;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

/**
* @author Lenovo
*
*/
public class MainActivity extends Activity {

protected static final int LOAD_SUCCESS = 0;

private static final int LOAD_ERROR = 1;

private ImageView iv_image;

private Handler mHandler = new Handler(){
   public void handleMessage(Message msg) {
     switch (msg.what) {
     case LOAD_SUCCESS:   //加载图片成功
       Bitmap bitmap = (Bitmap) msg.obj; //获取消息里面的数据
       iv_image.setImageBitmap(bitmap);
       break;
     case LOAD_ERROR:  //加载失败
       Toast.makeText(MainActivity.this, "图片加载失败", 0).show();
       break;
     }
   };
 };

@Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

iv_image = (ImageView) findViewById(R.id.iv_image);
 }

public void getImage(View v){
   new Thread(new Runnable() {

@Override
     public void run() {
       String path = "http://p2.so.qhimgs1.com/bdr/_240_/t01666725c7200ad5ae.jpg";

try {
         //1、获取URL
         URL url = new URL(path);
         //2、得到连接对象
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
         //设置连接时长
         conn.setConnectTimeout(5000);
         //设置请求方式
         conn.setRequestMethod("GET");
         //判断是否响应成功
         if(conn.getResponseCode() == 200){
           //3、获取输入流
           InputStream inputStream = conn.getInputStream();
           //4、获得图片资源Bitmap
           Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
           //消息对象
           Message msg = new Message();
           msg.what = LOAD_SUCCESS; //唯一标识
           msg.obj = bitmap;   //消失里面写在的数据
           mHandler.sendMessage(msg); //发送消失给Handle
         }else{
           alertUses();
         }

} catch (Exception e) {
         e.printStackTrace();
         alertUses();
       }
     }
   }).start();
 }

/**
  * 土司提醒用户,图片加载失败
  */
 public void alertUses(){
   mHandler.sendEmptyMessage(LOAD_ERROR);
 }
}

添加权限:

android利用消息机制获取网络图片

运行结果:

android利用消息机制获取网络图片

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com