Android开发系列(十二):获得网络上的图片

获得网络上图片的过程:

获得图片的Url—>通过Url连接图片对象—>把读到的图片的二进制数据写入内存—>返回内存中的数据—>显示出来

首先,我们要添加权限

因为我们要访问网络,所以我们要在AndroidManifest.xml文件总添加网络访问权限:

<!-- 访问internet权限 -->
<uses-permission android:name="android.permission.INTERNET"/>

然后就是设置界面:main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/imagepath"
    />

    <EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="http://b.hiphotos.baidu.com/image/w%3D310/sign=1d7f12db95dda144da096ab382b5d009/8d5494eef01f3a293c5d63069b25bc315d607c64.jpg"
    android:id="@+id/imagepath"
    />

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button"
    android:id="@+id/button"
    />

    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageView"
    />
</LinearLayout>

接下来是MainActivity.java文件:

package cn.itcast.image;

import cn.itcast.service.ImageService;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText pathText;
    private ImageView imageView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        pathText = (EditText) this.findViewById(R.id.imagepath);
        imageView = (ImageView) this.findViewById(R.id.imageView);
        Button button = (Button) this.findViewById(R.id.button);
        button.setOnClickListener(new ButtonClickListener());
    }

    private final class ButtonClickListener implements View.OnClickListener{

		public void onClick(View v) {
			String path = pathText.getText().toString(); //得到文本框的url路径
			try{
				//得到图片的二进制数据
				byte[] data = ImageService.getImage(path);
				//把图片转换成bitmap类型
				Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
				imageView.setImageBitmap(bitmap);//显示图片
			}catch (Exception e) {
				e.printStackTrace();
				Toast.makeText(getApplicationContext(), R.string.error, 1).show();
			}
		}
    }
}

然后我们还要配置ImageService.java文件:

package cn.itcast.service;

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

import cn.itcast.utils.StreamTool;

public class ImageService {
	/**
	 * 获取网络图片的数据
	 * @param path 网络图片路径
	 * @return
	 */
	public static byte[] getImage(String path) throws Exception{
		//得到url
		URL url = new URL(path);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();//基于HTTP协议连接对象
		conn.setConnectTimeout(5000);
		conn.setRequestMethod("GET");//设置以get方式提交
		if(conn.getResponseCode() == 200){ //如果响应码等于200就是请求成功
			InputStream inStream = conn.getInputStream(); //得到输入流
			return StreamTool.read(inStream); //得到图片二进制数据
		}
		return null;
	}

}

最后我们要添加一个工具类:

package cn.itcast.utils;

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

public class StreamTool {
	/**
	 * 读取流中的数据
	 * @param inStream
	 * @return
	 * @throws Exception
	 */
	public static byte[] read(InputStream inStream) throws Exception{
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while( (len = inStream.read(buffer)) != -1){//inStream.read(buffer)返回int:读取到的数据长度,当读到-1就是读完了
			outStream.write(buffer, 0, len); //把读到的数据写入内存
		}
		inStream.close();
		return outStream.toByteArray(); //返回内存中的数据
	}

}

效果图如下:

时间: 2024-10-13 00:30:14

Android开发系列(十二):获得网络上的图片的相关文章

Android开发系列(二十九):使用ContextMenu创建上下文菜单

在上一篇我们介绍了创建选项菜单,这里我们介绍下创建上下文菜单. 上下文菜单就是通过长按某一段文字,然后出来相应的菜单.就比如贴吧,当你长安某一楼层,就会弹出来一个"复制"这一楼层文字的菜单,点一下"复制",这段文字就保存在你手机的临时存储的地方了,可以在别的地方黏贴. 开发上下文菜单的步骤: 1.重写Activity的onCreateContextMenu(ContextMenu menu,View source,ContextMenu.Context MenuIn

Android开发系列(二十二):AdapterViewFlipper的功能和用法

AdapterViewFlipper继承了AdapterViewAnimator,它会显示一个View组件,可以通过showPrevious()和showNext()方法控制组件显示上一个.下一个组件. XML属性: android:animateFirstView:设置显示该组件的第一个View时是否使用动画 android:inAnimation:设置组件显示时使用的动画 android:loopViews:设置循环到最后一个组件后是否自动"转头"到第一个组件 android:ou

Android开发系列(二十八):使用SubMenu创建选项菜单

大部分手机上边都会有一个"MENU"键,在一个应用安装到手机上之后,可以通过"MENU"显示该应用关联的菜单. 但是,从Android 3.0开始,Android不再要求手机设备上必须提供MENU案件,虽然现在还有很多手机都会提供MENU按键,但是有一部分已经不再提供.在这种情况下,Android推荐使用ActionBar来代替菜单.在以后的博文中我们会介绍Android对ActionBar的支持 Menu接口是实现这个功能的按键之一,其中SubMenu继承自Men

Android开发系列(二十四):Notification的功能与用法

关于消息的提示有两种:一种是Toast,一种就是Notification.前者维持的时间比较短暂,后者维持的时间比较长. 而且我们平常手机的应用比如网易.贴吧等等都有很多的推送消息,就是用Notification实现的. Notification是显示在手机状态栏的通知-手机状态栏位于手机屏幕的上方.程序一般通过NotificationManager服务来发送Notification通知 Notification的一些方法,接下来我们都能够用到: setDefaults():设置通知LED等.音

Android开发系列(二十):AutoCompleteTextView(自己主动完毕文本框)的功能和使用方法

当用户输入一定的字符之后,自己主动完毕文本框可以显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView可以依照用户的选择自己主动填写该文本框 AutoCompleteTextView是从EditText派生而出,比普通编辑框多了一个功能:输入一定字符后,自己主动完毕文本. 下边我们看下它的属性: android:completionHint:设置下拉菜单中的提示标题 android:completionHintView:设置下拉菜单中提示标题的视图

Android开发系列(二十):AutoCompleteTextView(自动完成文本框)的功能和用法

当用户输入一定的字符之后,自动完成文本框能够显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView可以按照用户的选择自动填写该文本框 AutoCompleteTextView是从EditText派生而出,比普通编辑框多了一个功能:输入一定字符后,自动完成文本. 下边我们看下它的属性: android:completionHint:设置下拉菜单中的提示标题 android:completionHintView:设置下拉菜单中提示标题的视图 androi

Android开发系列(二十四):Notification的功能与使用方法

关于消息的提示有两种:一种是Toast,一种就是Notification.前者维持的时间比較短暂,后者维持的时间比較长. 并且我们寻常手机的应用比方网易.贴吧等等都有非常多的推送消息.就是用Notification实现的. Notification是显示在手机状态栏的通知-手机状态栏位于手机屏幕的上方.程序一般通过NotificationManager服务来发送Notification通知 Notification的一些方法.接下来我们都可以用到: setDefaults():设置通知LED等.

Android开发系列(二十六):使用PopupWindow创建对话框风格的窗口

创建对话框风格的窗口很简单,需要步骤: 1.调用PopupWindow的构造器创建PopupWindow对象 2.调用PopupWindow的showAsDropDown(View v)作为v组件的下拉组件显示出来:或调用PopupWindow的showAtLocation()方法将PopupWindow在指定位置显示出来. 首先,我们创建一个Android项目,然后编辑main.xml文件: <?xml version="1.0" encoding="utf-8&qu

Android开发系列(二十三):实现带图片提示的Toast提示信息框

Android中的Toast是很常见的一个消息提示框,但是默认的消息提示框就是一行纯文本,所以我们可以为它设置一些其他的诸如是带上图片的消息提示. 实现这个很简单: 就是定义一个Layout视图,然后设置Toast显示自定义的View. 在这里,就是设置了一个LinearLayout容器,然后给这个容器添加图片,添加文字信息.然后把这个容器设置给Toast对象,让其显示出来. 首先创建一个Android项目,然后我们编辑下main.xml文件: <span style="font-size

BizTalk开发系列(十二) Schema设计之Group与Order

开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档.因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构).虽然BizTalk提供了对于XML消息的验证功能.但是往往在BizTalk Schema设计器设计Schema的时候对于Group的用途不是很在意.今天我们来了解一下它的作用,希望对于设计灵活的Schema有点帮助. 首先,我们来了解一下Group的概念,在W3C的定义中. Group是用于定义在复杂