从网络中获取加载一个图片

原创 2016年05月30日 21:28:17

运行效果图:




注意:要用网络资源必须要是模拟器获取联网权限:

    <!--获取联网权限  -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>



修改activity_image.xml文件,代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    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=".ImageActivity" >

    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="加载" />

    <ImageView 
        android:id="@+id/Iv"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/bg_4"/>

</LinearLayout>

修改ImageActivity.java文件,代码如下:

import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class ImageActivity extends Activity {
	private ImageView Iv;
	private Button btn;
	//定义thread以及返回的id
	private final int SUCCESS=0;
	private final int FAILED=1;
	//网络获取图片的地址
	private final String url="http://d.3987.com/htfss_140227/004.jpg";
	//网络获取图片的bitmap对象
	private Bitmap bit=null;
	//定义handler对象
	private Handler handler=new Handler(){
		//实现当handler接收到message信息的回调函数
		public void handleMessage(Message msg){
			super.handleMessage(msg);
			switch (msg.what) {
			case SUCCESS:
				Toast.makeText(ImageActivity.this, "图片加载成功", Toast.LENGTH_SHORT).show();
				Iv.setImageBitmap(bit);
				break;

			case FAILED:
				Toast.makeText(ImageActivity.this, "图片加载失败", Toast.LENGTH_SHORT).show();
				break;
			}
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_image);
		Iv=(ImageView) findViewById(R.id.Iv);
		btn=(Button) findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				setImage();
			}
		});
	}

	public void setImage(){
		//判断网络是否畅通
		if(isOpenNetwork()){
			new Thread(){
				public void run() {
					super.run();
					//请求网络图片
					try {
						bit=getRemoteImage(new URL(url));
					} catch (MalformedURLException e) {
						e.printStackTrace();
					}
					//根据加载的网络图片,返回不同的message对象
					if(bit !=null){
						Message msg=new Message();
						msg.what=SUCCESS;
						//给handler发送message信息对象
						handler.sendMessage(msg);
					}else{
						Message msg=new Message();
						msg.what=FAILED;
						handler.sendMessage(msg);
					}
				};
			}.start();
		}
	}
	//根据传入的url对象,请求网络图片
	public Bitmap getRemoteImage(final URL aURL){
		//建立链接
		try {
			final URLConnection conn=aURL.openConnection();
			conn.connect();
			//从url链接读取图片流
			final BufferedInputStream bis=new BufferedInputStream(conn.getInputStream());
			//从图片流中得到图片
			final Bitmap bm=BitmapFactory.decodeStream(bis);
			//关闭图片流
			bis.close();
			return bm;
		} catch (IOException e) {
			Log.d("DEBUGTAG", "Oh noooz an error...");
		}
		
		return null;		
	}
	//判断网络状态是否正常
	private boolean isOpenNetwork(){
		//得到系统的网络链接服务
		ConnectivityManager connManager=(ConnectivityManager) getSystemService(
						Context.CONNECTIVITY_SERVICE);
		//判断网络是否可以链接
		if(connManager.getActiveNetworkInfo() !=null){
			return connManager.getActiveNetworkInfo().isAvailable();
		}
		return false;
	}
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

获取网络图片的ImageSpan

TextView做图文混排时可能用到Html下的ImageGetter工具或者ImageSpan。 ImageGetter获取网络图片的例子很多, 但是如果文本中不包含图片的宽高信息,那么考虑预留多...

自定义一个简单的可以加载网络图片的ImageView

import java.io.IOException; import java.lang.ref.SoftReference; import java.net.MalformedURLExceptio...
  • nnmmbb
  • nnmmbb
  • 2014年09月24日 16:42
  • 1008

从零开始实现一个网络图片加载框架

项目使用 Picasso的时候发现一些问题,列表大量快速滑动的时候容易内存过高而崩溃。快速滑动有卡顿。仔细看了下源码。发现Picasso的解析是没有做线程池限制处理的。大量解析容易导致内存来不及释放而...

GridView 加载网络图片 | 点击 Item 传递图片到另一个 Avtivity

1.声明 GridView private PullToRefreshGridView ptrgv;2.为 GridView 添加图片 @Override public ...

网络通信框架Volley之一——获取String数据和图片的异步加载

在android开发中,与后台交互获取数据必不可少,

开启一个线程加载一张图片

  • 2017年05月03日 09:47
  • 60KB
  • 下载

一个可以加载png图片的控件源码

  • 2010年12月24日 09:37
  • 137KB
  • 下载

基于SDWebImage的网络图片加载处理 & 获取网络中得UIimage

在IOS下通过URL读一张网络图片,可以直接把图片路径放到图片路径的位置就ok, 而是需要我们通过一段类似流的方式去加载网络图片,接着才能把图片放入图片路径显示。 这里找了一段代码是用来加载图...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从网络中获取加载一个图片
举报原因:
原因补充:

(最多只允许输入30个字)