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

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

消息机制的图解:

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

布局: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);
  }
}

添加权限:

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • android获取相册图片和路径的实现方法

    Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题. 比如:managedQuery()现在已经被getContentResolver().query()替代了,不过它们的参数都是一样的 再比如Android4.4后Intent(Intent.ACTION_GET_CONTENT);和Intent(Intent.ACTION_OPEN_DOCUMENT);两个方法所得到的

  • Android依据名字通过反射获取在drawable中的图片

    MainActivity如下: 复制代码 代码如下: package cn.testreflect; import java.lang.reflect.Field; import android.os.Bundle; import android.widget.ImageView; import android.app.Activity; /** * Demo描述: * 依据图片的名字,通过反射获取其在drawable中的ID * 在根据此ID显示图片 */ public class MainA

  • Android获取SD卡上图片和视频缩略图的小例子

    如何判断文件呢? 可以通过Cursor遍历数据库,对比INTERNAL_CONTENT_URI字段的值,这是一个Uri,这里保存着Android手机SD卡上的多媒体文件完整路径. [java] 复制代码 代码如下: Uri originalUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;                 //若为视频则为MediaStore.Video.Media.EXTERNAL_CONTENT_URI;          

  • Android从服务器获取图片的实例方法

    [java] 复制代码 代码如下: public static Bitmap getBitmapFromServer(String imagePath) { HttpGet get = new HttpGet(imagePath);     HttpClient client = new DefaultHttpClient();     Bitmap pic = null;     try {         HttpResponse response = client.execute(get)

  • Android实现从网络获取图片显示并保存到SD卡的方法

    本文实例讲述了Android实现从网络获取图片显示并保存到SD卡的方法.分享给大家供大家参考,具体如下: 问题: 如何不断获取图片并显示出来,达到视频的效果? 代码: public class GetPictureFromInternetActivity extends Activity { private ImageView imageView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

  • Android获取SD卡中选中图片的路径(URL)示例

    最近在做一个图片上传的功能,需要提供上传图片在SD卡中的路径,在网上看了些例子,改改调试成功,代码很简单.其布局文件如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill

  • android 获取视频,图片缩略图的具体实现

    1.获取视频缩略图有两个方法(1)通过内容提供器来获取(2)人为创建缩略图 (1)缺点就是必须更新媒体库才能看到最新的视频的缩略图 [java] 复制代码 代码如下: /**      * @param context      * @param cr     * @param Videopath     * @return      */     public static Bitmap getVideoThumbnail(Context context, ContentResolver cr

  • android照相、相册获取图片剪裁报错的解决方法

    这是调用相机 public static File getImageFromCamer(Context context, File cameraFile, int REQUE_CODE_CAMERA, Intent intent) { intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File fileDir = HelpUtil.getFile(context, "/Tour/user_photos"); cameraFile

  • android获取音乐文件的内置专辑图片实现思路及代码

    代码和注释如下: 复制代码 代码如下: private Cursor getCursor(String filePath) { String path = null; Cursor c = getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); // System.out.printl

  • Android 异步获取网络图片并处理导致内存溢出问题解决方法

    测试环境为Adnroid 2.1以上. 1.AndroidManifest.xml 权限配置: 添加互联网访问权限: 复制代码 代码如下: <uses-permission android:name="android.permission.INTERNET" /> 2.异步图片类 ImageDownloadTask 复制代码 代码如下: import java.io.ByteArrayOutputStream; import java.io.IOException; imp

随机推荐