实习日志(11):Android网络通信之网络图片查看器

根据实习科目二的要求,近期需要重点练习一下Android网络通信相关内容。今天先搞一个简单的小应用——网络图片查看器。

根据应用需求,先创建一个web应用,向其中放入一张图片之后部署在Tomcat上。

通过EditText显示网络图片路径,Button控制图片显示,ImageView显示图片。

界面部分代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context=".ImageLookerActivity" >    
    <!-- 输入框 -->
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/imagePath"
        android:text="http://172.16.59.35:8080/lss/images/blackboard.jpg"     
    />
    <!-- 按钮 -->
    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/button"
        android:text="@string/button"   
    />
    <!-- 显示图片组件 -->
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"    
    />  
</LinearLayout>

界面效果:

Activity部分代码:

 

public class MainActivity extends Activity {
	EditText text;
	ImageView image;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);      
        text=(EditText)this.findViewById(R.id.imagePath);
        image=(ImageView)this.findViewById(R.id.imageView);
        Button button=(Button)this.findViewById(R.id.button);
        button.setOnClickListener(new ButtonClickListener());
    }      
  //定义一个按钮监听事件内部类
private final class ButtonClickListener implements OnClickListener
    {
    	public void onClick(View v) {
    		//点击按钮,得到文本框中的图片路径
    		String path=text.getText().toString();
    		byte[] data;
			try {
				//定义一个ImageService业务类,以字节数组的形式得到图片数据
				data = ImageService.getImage(path);
				//使用数组数据生成位图的对象
	    		Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);
	    		//将位图放入图片控件
	    		image.setImageBitmap(bitmap);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				Toast.makeText(getApplicationContext(), R.string.error, 1).show();
			}    		
    	}   	
    }
}

ImageService业务类

 

public class ImageService {
    /**
     * 获取网络图片的数据
     */
	public static byte[] getImage(String path) throws IOException {
		URL url=new URL(path);
		//得到一个基于http协议的链接对象
        HttpURLConnection conn=(HttpURLConnection)url.openConnection();
        //设置链接的超时时间
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("GET");
       //取得服务器返回的相应码
        if(conn.getResponseCode()==200)
        {    InputStream inputStream=conn.getInputStream(); 
        	 //定义一个流工具类,将输入流中的内容以字节形式返回
        	 return StreamTool.read(inputStream);      	 
        }        
		return null;
	}
}

StreamTool工具类

 

public class StreamTool {
/**
 * 读取流中的数据
 */
	public static byte[] read(InputStream inputStream) throws IOException {
		byte[] buffer=new byte[1024];
		ByteArrayOutputStream outStream=new ByteArrayOutputStream();
		int len=0;
		while((len=inputStream.read(buffer))!=-1)
		{
			outStream.write(buffer, 0, buffer.length);
		}
		//关闭输入流
		inputStream.close();
		//返回内存中数据
		return outStream.toByteArray();
	}
}

注意申请网络访问权限:

 <!-- 允许网络访问 --> 
<uses-permission android:name="android.permission.INTERNET"/>

步骤总结:

1、首先得到输入流

InputStream inputStream=conn.getInputStream();

2、根据资源类型转换成对应数据。

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

运行结果:

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值