Android程序如何实现从网络中获取一张图片

    在学习黎活明的Android视频的时候,有一讲是说怎么从网络中获取图片。这里,我就做一个笔记和总结吧。

首先,我们要知道图片这种文件,不能以我们印象中那些基本数据类型来定义或是以这些类型从网络中获取图片。

所以我们需要用到二进制(计算机的世界就是一个二进制的世界啊。。。)数据类型。

说到网络,我们就会想网址。是的,这里,我们从网络上获取一张图片,也得知道这张图片的网址。

本用例中,我用的是写死一个图片地址,大家也可以用各种方法来把这个地址不写死,做成一个浏览的效果。

这里,我们还要用到一个位图(Bitmap)类。

在获取图片二进制时,我们首先用openConnection()打开一个图片连接;再设置请求命令将被发送到远程HTTP服务器;最后通过输入流输入图片数据。

GetImageActivity.java

package com.image.ui;

import com.image.servce.ImageServce;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class GetImageActivity extends Activity {
	
	TextView textView;
	ImageView imageView;
	private final static String TAG = "GetImageActivity";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button button = (Button)this.findViewById(R.id.buttonShowImage);
        textView = (TextView)this.findViewById(R.id.pathName);
        imageView = (ImageView)this.findViewById(R.id.imageView);
        
        button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				String path = textView.getText().toString();
				try {
					byte[] data = ImageServce.getNetImage(path);
					Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); // 生成位图
					imageView.setImageBitmap(bitmap); // 显示位图
				} catch (Exception e) {
					// TODO Auto-generated catch block
					Toast.makeText(GetImageActivity.this, R.string.error, 1).show(); // 显示错误信息
					Log.e(TAG, e.toString()); // 生成异常日志
				}
			}
		});
    }
}


ImageServce.java

package com.image.servce;

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

import com.image.utils.StreamTool;

public class ImageServce {
	private final static int ONE_SECOND = 1000; // 定义一秒
	private final static String URL_HTTP = "http://a.hiphotos.bdimg.com/album/s%3D740%3Bq%3D90/sign=493c3a7f9e82d158bf825bb5b03168e5/1c950a7b02087bf492e4eb78f0d3572c11dfcf13.jpg";


	public static byte[] getNetImage(String path) throws Exception {

		// 给定一条网络路径
		URL url = new URL(URL_HTTP);
		HttpURLConnection huconn = (HttpURLConnection) url.openConnection(); // url用openConnection()打开连接
		huconn.setRequestMethod("GET"); // 设置用GET请求命令将被发送到远程HTTP服务器

		huconn.setConnectTimeout(5 * ONE_SECOND); // 设置超时时间5秒

		InputStream inStream = huconn.getInputStream(); // 通过输入流输入图片数据
		return StreamTool.getNetImage(inStream);
	}

}


StreamTool.java

package com.image.utils;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

public class StreamTool {
	public static byte[] getNetImage(InputStream inStream) throws Exception {

		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;

		// 读取到流的末尾,返回-1
		// 这里为只要还没有读到流的末尾,就一直往内存中输出二进制数据
		while ((len = inStream.read(buffer)) != -1) {
			outStream.write(buffer, 0, len);
		}
		inStream.close();
		return outStream.toByteArray();
	}
}


效果图:

                      


这里我给出一个我上传到CSDN上的资源源码。Android程序从网络上获取一张图片【代码】

转载于:https://www.cnblogs.com/fengju/p/6336164.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值