博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android学习--网络通信之网络图片查看器
阅读量:4556 次
发布时间:2019-06-08

本文共 3526 字,大约阅读时间需要 11 分钟。

笔记摘要:

    这里主要讲IO流和Web技术相结合,由客户端提交获取图片服务请求,服务端返回图片。

    同样的我们可以获取到各种格式的数据(文本、网页、XML、Json),只要在读取工具类中对数据进行相应的转换,返回指定格式的数据即可

    需要注意的是:测试时访问路径不能使用localhost必须使用IP地址,因为Android也是操作系统,所以它会认为是访问了自己系统的本地,就无法访问到资源

   

一、设计步骤

1、页面设计

注意:获得网络访问许可

2、创建一个web服务

在WebContent中存入一幅图片:a.jpg

3、编写图片服务类

一个工具类提供读取数据的方法

二、访问效果页面

三、代码实现

strings.xml

myNetPic
Settings
MainActivity
网络图片路径
查看
获取图片失败

在AndroidMainfest.xml文件中添加网络访问权限

MainActivity.java

package com.example.mynetpic;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.Toast;import com.example.service.ImageService;public class MainActivity extends Activity {	private EditText pathText;	private ImageView imageView;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        pathText = (EditText)this.findViewById(R.id.imagepath);        Button button = (Button)this.findViewById(R.id.button);        imageView = (ImageView)this.findViewById(R.id.imageView);        button.setOnClickListener(new ButtonClickListener());        }    private  final  class ButtonClickListener implements View.OnClickListener{    	    	public void onClick(View v) {    		String path = pathText.getText().toString();//获取文本框中的图片路径			try {				byte[] 	data = ImageService.getImage(path);//调用ImageService工具类中的获取图片的方法				Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);//采用二进制来构建图片的位图数据				imageView.setImageBitmap(bitmap);//显示图片			} catch (Exception e) {				e.printStackTrace();				Toast.makeText(getApplicationContext(), R.string.error, 1).show();//获取失败,提示错误信息			}    	}    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }}
提供图片服务的工具类
package com.example.service;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import com.example.util.StreamTool;public class ImageService {	/*	 *获取网络图片的数据	 *@param path 网络图片路径	 *@return 	 * */	public static byte[] getImage(String path)throws Exception{		URL url = new URL(path);//将路径封装成URL对象		HttpURLConnection conn = (HttpURLConnection) url.openConnection();//得到一个基于HTTP协议的链接对象		conn.setConnectTimeout(5000);//设置请求时间为5秒		conn.setRequestMethod("GET");//请求方式为GET		if(conn.getResponseCode() == 200){	//通过服务器的返回码,判断请求是否成功						InputStream inStream = conn.getInputStream();//获取输入流			System.out.println("ImageService");			return StreamTool.read(inStream); //这里将读取数据的方法单独抽取,提高重用性		}		return null;	}}
由于要反复读取数据,所以将读取数据的代码封装为一个工具类

package com.example.util;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;/*	读取流中的数据	@return * */public class StreamTool {	public static byte[] read(InputStream inStream) throws Exception{		ByteArrayOutputStream outStream = new ByteArrayOutputStream();//创建一个内存输出流,存放数据		byte[] buf = new byte[1024];		int len = 0;		while((len = inStream.read(buf))!=-1){	//不断读取			outStream.write(buf,0,len);		}		inStream.close();		return outStream.toByteArray();//返回内存中的数据	}}

转载于:https://www.cnblogs.com/xushuai123/archive/2013/01/21/3634421.html

你可能感兴趣的文章
搬运工程 启动!
查看>>
局部加权回归(LWR) Matlab模板
查看>>
Connect to the DSP on C6A8168/DM8168/DM8148 using CCS
查看>>
hibernate在使用getCurrentSession时提示no session found for current thread
查看>>
【Luogu1471】方差(线段树)
查看>>
【agc028E】High Elements(动态规划,线段树,贪心)
查看>>
DEV中svg图标的使用
查看>>
Codefroces Gym101572 I.Import Spaghetti-有向图跑最小环输出路径(Floyd)
查看>>
有关位运算的操作+二进制状态压缩
查看>>
Eclipse插件 -- 阿里巴巴扫描编码规插件
查看>>
(1.1)学习笔记之mysql体系结构(内存、进程、线程)
查看>>
markdown测试
查看>>
Java-Maven-Runoob:Maven 依赖管理
查看>>
杂项-Log:log4net
查看>>
杂项-Java:EL表达式
查看>>
tarroni music
查看>>
unity 使用RotateAround的使用注意
查看>>
[SDOI2009]HH的项链
查看>>
CodeFirst模式,容易引发数据迁移问题(不建议使用)
查看>>
jquery的colorbox关闭并传递数据到父窗
查看>>