`

android 异步回调加载网络图片

阅读更多
在做应用的时候很多时候都会去从网络加载图片,而且还要做各种各样的加载效果。比如,加载图片的时候在图片上显示loading的图片,图片加载完成时loading消失,加载失败又有相应的处理。如果处理不好就会很麻烦,下面总结了一个轻量级的从网络加载图片方法。

import java.io.File;

import java.io.IOException;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;



import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Handler;

import android.os.Message;



public class Utils

{



    /**

     * 加载图片

     * @param url 图片的url

     * @param listener 回调监听器

     */

    public void loadImage(final String url, final OnLoadImageListener listener)

    {

        if (null == url || null == listener)

        {

            return;

        }

        

        final Handler handler = new Handler()

        {

            public void handleMessage(Message msg)

            {

                listener.onLoadImage((Bitmap) msg.obj, url);

            }

        };

        

        // 之前根据url写入本地缓存的路径

        String path = "";

        File file = new File(path);

        if (file.exists())

        {

            Bitmap bm = BitmapFactory.decodeFile(path);

            sendMessage(handler, bm);

            return;

        }



        new Thread(new Runnable()

        {

            public void run()

            {

                try

                {

                    // 网络加载图片,还可以加入延迟(time out)条件

                    URL u = new URL(url);

                    HttpURLConnection httpConnection = (HttpURLConnection) u.openConnection();

                    if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK)

                    {

                        Bitmap bm = BitmapFactory.decodeStream(httpConnection.getInputStream());

                        sendMessage(handler, bm);

                        // 同时对图片进行缓存...

                        return;

                    }

                    

                    // 没有请求到图片

                    sendMessage(handler, null);

                } catch (MalformedURLException e)

                {

                    sendMessage(handler, null);

                } catch (IOException e)

                {

                    sendMessage(handler, null);

                }

            }

        }).start();

            

    }

    

    /**

     * 向handler发送处理的消息

     * @param handler

     * @param bm

     */

    private void sendMessage(Handler handler, Bitmap bm)

    {

        Message msg = handler.obtainMessage();

        msg.obj = bm;

        handler.sendMessage(msg);

    }

    

    /**

     * 加载图片时的回调

     *

     */

    public interface OnLoadImageListener

    {

        public void onLoadImage(Bitmap bm, String imageUrl);

    }

}



此例中用到了Handler,从而不需要用到AsyncTask,AsyncTask感觉使用起来很麻烦,而且貌似还有延迟。这样做的话可以直接在回调里面做设置图片处理,而不必要担心是不是UI线程。如下:



new Utils().loadImage("图片链接", new OnLoadImageListener()

        {

            @Override

            public void onLoadImage(Bitmap bm, String imageUrl)

            {

                if (null == bm)

                {

                    imageView.setImageResource(R.drawable.default_img);

                }

                else

                {

                    imageView.setBitmapImage(bm);

                }

            }

            

        });


来自: http://www.2cto.com/kf/201110/107333.html
分享到:
评论

相关推荐

    Android AsyncTask用法和异步加载图片.rar

    `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间运行的任务放到后台线程,而将结果更新到主线程,这样可以避免主线程(UI线程)阻塞,提高应用的响应速度。`...

    Android异步加载网络图片(线程)

    在Android应用开发中,异步加载网络图片是...总之,Android异步加载网络图片结合LruCache和线程回调是一种高效且实用的策略,可以显著提升应用的性能和用户体验。理解并掌握这些知识点对于Android开发者来说至关重要。

    使用Android Studio 练习RecyclerView 异步加载图片,解决图片乱序问题。

    然而,在实际开发中,当我们需要在RecyclerView中异步加载图片时,可能会遇到图片显示乱序的问题。本文将深入探讨这个问题及其解决方案。 首先,我们来理解为什么会出现图片乱序的现象。这是因为RecyclerView在滚动...

    Android实现ListView异步加载图片

    "Android实现ListView异步加载图片" Android 实现 ListView 异步加载图片是一种常见的技术,旨在提高应用程序的性能和用户体验。本文将详细介绍 Android 中实现 ListView 异步加载图片的方法,并对相关的技术概念...

    Android使用GridView异步加载(弱引用)网络图片(支持点击查看)Demo

    图片下载完成后,通过回调更新对应ImageView的图片资源。 对于图片的显示,Android提供了多种库,如Universal Image Loader、Picasso、Glide等,这些库都支持异步加载和缓存策略。在这个Demo中,可能会使用其中的一...

    Android Listview异步加载图片

    本文将深入探讨Android ListView中异步加载图片的策略、常见问题以及解决方案。 首先,我们要理解异步加载的基本原理。异步加载是指在后台线程中执行耗时操作,如加载图片,而主线程则继续处理用户交互,保证界面...

    Android实现异步从网络加载图片列表和上拉加载更多、下拉刷新列表(使用xListView框架)

    本教程将深入探讨如何使用xListView框架实现异步加载网络图片,并且支持上拉加载更多和下拉刷新功能,提升用户体验。 首先,xListView是Android平台上的一个开源库,它扩展了原生的ListView组件,提供了更丰富的...

    android listView 异步加载图片

    这里的“android listView 异步加载图片”指的是在不阻塞UI线程的情况下,从网络、本地存储或其他来源加载图片到ListView中的技术。 这篇名为“ImageLoader”的Java文件很可能就是一个实现图片异步加载的工具类。在...

    android TextView异步加载HTML(含图片)

    其他 Picasso 相关回调 }); // 返回一个占位符或者空的Drawable,因为图片是在后台加载的 return new ColorDrawable(Color.TRANSPARENT); } } ``` `tv.setText()` 最后将整个解析后的Spanned对象设置给`...

    android异步加载图片源码

    总结来说,Android异步加载图片涉及到多个层面的技术,包括线程管理、缓存策略、图片处理和网络通信等。`AsyncListImage`这个项目为我们提供了一个实际的应用场景,让我们有机会深入研究这些技术,并将其应用到自己...

    android 子线程URL加载网络图片

    - Google推出的网络请求库Volley支持异步加载图片,它内置了ImageLoader组件,能自动缓存图片,提高加载速度。 - Volley使用DiskBasedCache进行磁盘缓存,并结合MemoryCache进行内存缓存,实现高效图片加载。 5. ...

    Android开发中批量异步加载网络图片的方法

    在Android应用开发中,批量异步加载网络图片是一项常见的需求,尤其在开发涉及大量图片展示的App时,如社交应用、电商应用等。这个过程通常涉及到网络请求、线程管理、图片缓存以及UI更新等多个方面。下面我们将详细...

    android异步显示网络图片

    5. **UI回调**:在图片加载完成后,通过回调方法将Bitmap传递给UI组件,如ImageView,确保更新UI操作在主线程中进行。 PicUtils 类可能是辅助工具类,包含了与图片处理相关的静态方法。这些方法可能包括: 1. **...

    android ExpandableListView子集异步加载+IphoneTreeView

    2. **启动异步任务**:在`OnGroupClickListener`的回调中,启动异步任务,如`AsyncTask`,去加载对应组的子项数据。 3. **数据处理**:在`doInBackground()`方法中,从服务器或本地数据库获取子项数据。 4. **更新UI...

    异步加载图片(网络、本地)

    一、网络异步加载图片 网络异步加载图片通常涉及到HTTP或HTTPS请求。在Android中,我们可以使用`HttpURLConnection`或第三方库如`Volley`、`OkHttp`、`Retrofit`来实现。以`OkHttp`为例,它提供了异步请求的方法,...

    图片异步加载,照片墙,异步加载listview图片2

    因此,异步加载图片是必要的,它可以在后台线程中处理图片下载和解码工作,保持UI流畅。 2. ListView与异步加载: ListView是一个常用的组件,用于展示可滚动的列表数据。每个列表项可能包含图片。当用户滚动时,...

    Android异步加载图片

    "Android异步加载图片"这个话题涉及到如何有效地在不阻塞用户界面的情况下,从网络、本地存储或资源文件中获取并显示图片。以下是对这个主题的详细阐述: 首先,我们需要理解为什么需要异步加载。在Android中,如果...

    接口回调之异步网络加载

    在编程领域,尤其是移动开发和Web开发中,接口回调和异步网络加载是两个至关重要的概念,它们在实现应用程序的动态数据获取和更新时起到关键作用。本文将深入探讨这两个主题,以及它们如何协同工作来优化用户体验。 ...

    Android异步加载图像小结 (含线程池,缓存方法).rar

    7. **加载监听**:添加加载监听回调,可以在图片加载开始、成功、失败或取消时执行相应操作,如显示加载进度条、错误提示等。 8. **网络状态判断**:在进行异步加载时,应先检测网络状态,避免在网络不稳定或无网...

    安卓Android源码——listview实现图片的异步加载.zip

    在安卓开发中,ListView是展示大量数据常用的组件,但直接在ListView中加载图片可能会导致性能问题,如界面卡顿、滚动不流畅等。为了解决这些问题,开发者通常会采用图片异步加载技术。本资料“安卓Android源码——...

Global site tag (gtag.js) - Google Analytics