招生热线
0755-86191118 0755-86191118
我的位置: 首页 > 学习专区 > 安卓技术 > Android制作一个可以获取网络图片的程序

Android制作一个可以获取网络图片的程序

2012-02-19 11:29:00
来源:
[导读] 在main xml上,我们需要放入ImageView、Button、EditText这样三个控件,到时候,我们点击按钮的时候就可以从editText中获取刚才我们获取的

在main.xml上,我们需要放入ImageView、Button、EditText这样三个控件,到时候,我们点击按钮的时候就可以从editText中获取刚才我们获取的地址字符串,并通过一系列操作获取图片数据,再通过ImageView的setImageBitmap(bitmap)方法在界面上把图片显示出来。以下是详细代码,我一行一行给大家解读一下

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.media.MediaPlayer;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

public class GetNetImageActivity extends Activity { //声明三个控件

private TextView address;

private Button show;

private ImageView pic;

String path=”http://images.chinagate.cn/attachement/jpg/site1020/20100313/000cf1a487860d0567ba40.jpg”;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//实例化三个控件

address=(TextView)findViewById(R.id.textview);

show=(Button)findViewById(R.id.showImage);

pic=(ImageView)findViewById(R.id.iamgeview);

//设置button的点击事件,一点击就可以看到图片

show.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v) {

try{ //显示出图片需要位图对象,即星号表明的这一行,而位图对象需要用图片数据来生成,而这个数据的获得就是下面那个方法所指出的。

byte[] data =GetNetImageActivity.this. getData();

* Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

pic.setImageBitmap(bitmap);

}catch(Exception e){}

}

});

}//这个方法用于获得图片的二进制数据

private byte[] getData() throws Exception {//这个path就是我们的那张图片的网络地址,URL就像是我们使用浏览器时候的那个地址栏对象,他包装了网址对象。

URL url = new URL(path);//调用URL对象的.openConnection() 返回一个HttpURLConnection 对象http

HttpURLConnection http = (HttpURLConnection) url.openConnection();//设置访问延时时间秒数,一般要在5秒以内。否则程序可能会出现错误

http.setConnectTimeout(3000);//设置请求的方法,我们可以用GET方法,也可以用POST方法

http.setRequestMethod(“GET”); //调用http的关键方法:getInputStream(),这个getInputStream()方法用来获取网络资源文件的流对象,比如我们现在做的实验室获取图片,那么getInputStream()方法就给我们图片数据流

InputStream in = http.getInputStream();//我们刚才获得了图片数据流,还不能马上转化成我们要显示的图片,而是需要进行转换,这个转换方法封装在getDta()这个方法里面,这个getData()方法需要我们传入InputStream对象,并返回一个byte[] 对象,我们接下来看看这个getData()方法

byte[] b = GetNetImageActivity.this. getByte(in);

return b;

}

public byte[] getByte(InputStream i ) throws IOException{//字节数组输出流,这个流就是起到缓冲的作用,

ByteArrayOutputStream out = new ByteArrayOutputStream();//构造一个字节数组,这个字节数组的大小是1024个字节,用于让输入流读取数据到其中 byte[] buffer = new byte[1024];//这个len起到监督货物有没有搬运完的作用。如果没有搬运完,则len不会小于0,否则等于-1,当等于-1的时候,就表达货物搬运完成

int len = 0;//i.read()方法表示把流读到字节数组中,返回的是读取到的内容的长度,在这个while里面我们判断len的数值大小,当len不小于0的时候,我们就一直搬运货物,直到小于0我们才不搬

while((len=i.read(buffer))!=-1){//在一边读的时候,我们就一边写,即调用输出流的write()方法,把数据读到内存里面,读多少,写多少,意思是每次搬运buffer这样容量的货物。

out.write(buffer,0,len);

}

i.close();

return out.toByteArray();

}

}

评论