android获取图片数据

网络的访问在我们日常生活中太重要了,如果没有网络我们的生活将会是什么样子呢?android手机和浏览器也是一样的,也可以通过网络通讯获取数据,如调用webservice,EJB等。下面就通过一个小例子从网络获取一幅图片并显示在手机上,开发中将会使用到一个新的组件ImageView.

1.写一个用来处理字节流的工具类


package org.lxh.util;

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

public class StreamTool {
	public static byte[] readInputStream(InputStream in) throws Exception{
		int len=0;
		byte buf[]=new byte[1024];
		ByteArrayOutputStream out=new ByteArrayOutputStream();
		while((len=in.read(buf))!=-1){
			out.write(buf,0,len);  //把数据写入内存
		}
		out.close();  //关闭内存输出流
		return out.toByteArray(); //把内存输出流转换成byte数组
	}

}

2.写一个得到图片byte数组的service类


package org.lxh.service;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.lxh.util.StreamTool;

import android.util.Log;

public class WebService {
	public static byte[] getImage(String path){
		
		URL url;
		byte[] b=null;
		try {
			url = new URL(path);   //设置URL
			HttpURLConnection con;
			
		    con = (HttpURLConnection)url.openConnection();  //打开连接
		
			con.setRequestMethod("GET"); //设置请求方法
			//设置连接超时时间为5s
			con.setConnectTimeout(5000);
			InputStream in=con.getInputStream();  //取得字节输入流
		
		    b=StreamTool.readInputStream(in);
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		return b;  //返回byte数组
		
	}
	
}

3.写一个用户操作界面


<?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/hello"
    />
    <TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/picaddress"
    />
    <EditText
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="http://www.desk9.com/Desk9Image/21/Desk9_21_1690_35790_S.jpg"
    android:id="@+id/imageaddress"
    />
    <Button
     android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/look"
    android:id="@+id/button"
    />
    <ImageView
     android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/image"/>
</LinearLayout>


4.写一个activity类


package org.lxh.net;

import org.lxh.service.WebService;

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.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class NetActivity extends Activity {
   private EditText picaddress;
   private Button button;
   private ImageView imageView;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button=(Button)this.findViewById(R.id.button);
        imageView=(ImageView)this.findViewById(R.id.image);
        picaddress=(EditText)this.findViewById(R.id.imageaddress);
        button.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				String address=picaddress.getText().toString();
				
				try {
				
					byte[] data=WebService.getImage(address); //得到图片的输入流
					
					//二进制数据生成位图
					Bitmap bit=BitmapFactory.decodeByteArray(data, 0, data.length);
					
					imageView.setImageBitmap(bit);
				
				} catch (Exception e) {
				    Log.e("NetActivity", e.toString());
					
					Toast.makeText(NetActivity.this, R.string.error, 1).show();
				}
			}
		});
    }
}

5.添加网络访问的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.lxh.net"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".NetActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="7" />

    <uses-permission android:name="android.permission.INTERNET"/>
</manifest> 

6.这里把strings.xml文件也贴出来


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, NetActivity!</string>
    <string name="app_name">图片查看</string>
    <string name="picaddress">图片地址</string>
    <string name="look">查看</string>
    <string name="error">网络连接异常</string>
</resources>

下面是运行效果图,代码我也上传给大家。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值