网络图片加载

加载Internet图片并显示在ImageView上。不可以在子线程中更改界面布局。

需要使用连接网络的权限: <uses-permission android:name="android.permission.INTERNET"/>

布局文件:

<RelativeLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="45dp"
        android:layout_marginTop="16dp"
        android:text="Button" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/button1"
        android:layout_below="@+id/button1"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="80dp"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

Activity类:

package com.example.netdemo;

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

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.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
    private Button button;
    private ImageView imageView;
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //根据msg.what的值判断是哪个子线程
            if(msg.what==11){
                Bitmap mBitmap=(Bitmap) msg.obj;
                imageView.setImageBitmap(mBitmap);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button) findViewById(R.id.button1);
        imageView=(ImageView) findViewById(R.id.imageView1);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                //开启子线程
                Thread thread=new Thread(new MyRunnable());
                thread.start();
            }
        });
    }

class MyRunnable implements Runnable{

    @Override
    public void run() {
        String urlString="http://amorypepelu.github.io/shell/src/8eea0ecdd3c83d2.jpg";
        InputStream is=null;
        try {
            //配置网络连接
            URL url=new URL(urlString);
            HttpURLConnection connection=(HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(5*1000);
            connection.setRequestMethod("GET");
            connection.setRequestProperty("", "");
            is=connection.getInputStream();
            //解析图片
            Bitmap bitmap=BitmapFactory.decodeStream(is);
            //配置消息
            Message msg=handler.obtainMessage();
            msg.what=11;
            msg.obj=bitmap;
            //发送
            handler.sendMessage(msg);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if (is!=null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}

}
时间: 2024-10-12 22:29:28

网络图片加载的相关文章

优化ListView中的网络图片加载 及 Volley库源码分析

使用适当的开源库,如Volley或者Universal ImageLoader 以Volley库为例.Volley使用了线程池来作为基础结构,主要分为主线程,cache线程和network线程. 主线程和cache线程都只有一个,而NetworkDispatcher线程可以有多个,这样能解决比并行问题.如下图: 其中左下角是NetworkDispatcher线程,大致步骤是: 1.不断从请求队列中取出请求 request = mQueue.take(); 2.发起网络请求 NetworkResp

Android 网络图片加载缓存处理库ImageLoader和Picasso

在Android图片处理中需要考虑的问题很多,例如OOM.图片缓存和网络图片加载.多线程问题及图片压缩处理等等复杂的问题.网上也有一些很优秀的开源库帮我们处理这些问题,下面介绍两款开源图片处理库框架:Universal-ImageLoader和Picasso. Universal-ImageLoader: 优点: 支持本地图片和网络图片的多线程异步加载和缓存处理: 个性化的配置自己项目的ImageLoader: 图片加载过程的监听回调: 自动对加载的图片针对当前剩余内存进行裁剪优化,防止OOM:

网络图片加载优化

网络图片加载优化 比如使用淘宝浏览产品的时候(大部分应用也是如此),就会发现每次下拉产品目录进行更新的时候,都会出现对应的Item的时候,才开始从网络下载并加载图片. taobao加载 可以看到宝贝图片下拉刷新的时候,图片加载是实时从网络下载的.即使在Wifi的网络环境下,加载图片也是有比较大的延迟. 假设我们浏览每屏宝贝需要2s的时间(人眼对于淘宝搜索的宝贝其实过滤速度非常快).如果每一屏页面需要1s才可以完全加载完图片,则如果浏览10屏的宝贝,就会需要30s.如果加载图片几乎不需要时间,则只

Viewpager图片自动轮播,网络图片加载,图片自动刷新

package com.teffy.viewpager; import java.util.ArrayList; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import android.annotation.SuppressLint; import android.app.Act

★android开发--ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)

例子中用于解析Json的Gson请自己Google下载 主Activity: package COM.Example.Main; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import COM.Example.Main.R; import COM.Example.Main.stringG

网络图片加载框架Universal-ImageLoader和Picasso优缺点对比

网络图片加载库的特点及优势 Android 中图片处理的难点: oom内存溢出 图片尺寸和缩略图处理的平衡 网络图片的加载与缓存机制 今天学习两款比较优秀的开源图片处理库框架: Universal-ImageLoader的简介和特点: android 主流的图片处理框架之一,作者是白俄罗斯的Sergey Tarasevich 1.支持本地图片和网络图片的多线程异步加载和缓存处理(另外对大图片进行压缩等处理防止内存溢出) 2.个性化的配置自己项目的ImageLoader (配置线程数,缓存空间的大

iOS网络开发(6)网络图片加载开源框架SDWebImage

SDWebImage是一个第三方框架,用以实现网络图像的缓存,及处理等功能. Github的托管下载地址: https://github.com/rs/SDWebImage SDWebImage默认使用磁盘缓存, 在 沙盒/Library/Cache中可以找到带WebImageCache字眼的目录,可以找到缓存的图片 SDWebImage以分类的形式,对UIKit中的控件扩展了网络图片加载接口,使用起来非常方便. 介绍SDWebImage中的几个分类: UIImageView加载网络图片 UIB

android网络图片加载缓存,避免重复加载。

1.主线程调用方法: imageView = new ImageView(this); AsynImageLoader asynImageLoader = new AsynImageLoader(); asynImageLoader.showImageAsyn(imageView, URL, R.drawable.nopicture); mViewList.add(imageView); 2.AsynImageLoader加载缓存:     public void showImageAsyn(I

Android开发之搜芽项目的图片加载问题(使用Volley进行网络图片加载)

搜芽的移动开发这几天进度相对来说非常的快.但是美中不足的就是网络图片的加载问题.我有两套方案: 1)沿用迅雷动漫的图片加载.迅雷动漫也是用的一个开源的库.但是不知道是我使用出了问题还是真的是它的问题.在我迅速的下拉和回倒的时候, 不确定的会出现崩溃.logcat显示loadImage里面出现了内存溢出.out of memory..这个我想应该不是我的问题. 2)采用外包的AsyncImageLoader.这个文件我没有仔细看.然后实验结果是,加载图片巨慢.而且容易导致卡顿. 所以,我将希望转向

iOS第三方网络图片加载- SDWebImage笔记(转)

SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. 使用示范的代码: UITableView使用UIImageView+WebCache类(基本应用,UIImageView的一个category) 前提#import导入UIImageView+WebCache.h文件,然后在tableview的cellFo