Android 之 使用URL访问网络资源

通过URL访问网络资源:
* URL对象代表统一资源定位器,它是指向互联网“资源”的指针,资源可以是简单的文件目录
也可以是更复杂的对象的引用,URL可以由协议名、主机、端口、和资源组成;

* 格式:protocal://host:port/resourceName;
例如:http://hao123.com/tiyan.html

* URL 类对象包含的一些方法:用于访问URL对应的资源:
url.getFile(); 获取此url的资源名;
url.getHost(); 获取此url的主机名;
url.getPath(); 获取此url的路径部分;
url.getPort(); 获取端口;
url.getProtocol();
openConnection(); 返回一个URLConnection对象,表示到URL所引用的远程对象连接;
openStream(); 打开此url连接,并返回一个用于读取该url资源的InputStream;

* 例如:访问网络资源上的一张图片;http://192.168.0.11:8080/s.jpg
java代码:

/* 测试:使用URL访问网络资源 */
	OnClickListener listener = new OnClickListener() {

		public void onClick(View v) {
			try{
				//http://192.168.0.11:8080/s.jpg  图片的网络地址
				String url_path = "http://192.168.0.11:8080/s.jpg";
				URL url = new URL(url_path);
				
				/* 打开URL对应的资源的输入流 */
				InputStream is = url.openStream();
				
				/* 从InputStream中解析出图片 */
				Bitmap bitmap = BitmapFactory.decodeStream(is);
				
				/* 使用ImageView显示该图片 */
				imageView.setImageBitmap(bitmap);
				
				/* 关闭流 */
				is.close();
			
				/****************************************************/
				
				/* 实现资源文件的保存 *//* 再次打开输入流 */
				is = url.openStream();
				
				/* 打开手机文件对应的输出流 *//* 参数:保存的文件名; 模式 */
				OutputStream os = openFileOutput("pic.jpg", MODE_WORLD_WRITEABLE);
				
				/* 字节数组 */
				byte[] buffer = new byte[1024];
				int hasRead = 0;
				while((hasRead=is.read(buffer))>0){
					os.write(buffer, 0, hasRead);
				}
				is.close();
				os.close();
			}catch(Exception ex){
				
			}		
		}
	};

* 使用URLConnection 提交请求:
简介:URLConnection 是个抽象类,它由一个直接的子类HttpURLConnection;
方法的介绍:URL 的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和URL之间
的通信连接,程序可以通过URLConnection实例向URL发送请求,读取URL引用的资源;
使用步骤:

* 使用HttpURLConnection 访问网络:
简介:HttpURLConnection 继承了URLConnection,因此可用于向指定的网站发送get post请求;
在URLConnection的基础上提供了如下便捷的方法;
getResponsedCode(); 获取服务器上的响应代码;
getResponseMessage(); 获取服务器相应消息;
getResponseMethod(); 获取发送请求的方法;
setResponseMethod(String method); 设置发送请求的方法;

温馨提示:get与post的介绍:
* Http 通信中使用最多的是get 和post , GET 请求可以获取静态页面,可以把参数放在url
字符串后面传递给服务器;
* 不同点:post的参数不是放在url字符串里,而是放在http请求数据中;

  案例:使用HttpURLConnection 访问网络图片:

  java代码:
/* 测试:通过HttpURLConnection 访问网络图片 */
	OnClickListener listerner_httpURLConnection = new OnClickListener() {
		
		public void onClick(View v) {	
			try{
				String path = "";	//URL 地址
				URL url = new URL(path);
				
				/* 打开连接, 获取HttpURLConnection 的对象 */
				HttpURLConnection conn = (HttpURLConnection) url.openConnection();
				
				/* 设置请求方式 */
				conn.setRequestMethod("get");
				
				/* 设置请求超时的时间 */
				conn.setReadTimeout(5000);
				
				/* 打开流,获取通道 *//* 可读流,从网络上将资源读取到内存中 */
				InputStream is = conn.getInputStream();
				
				/* 创建一个字节数据输出流;可写流 */
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				
				/* 创建一个字节数组 */
				byte[] buffer = new byte[1024];
				int len=0;
				
				/* 每次读取数据1024个字节,直到没有数据可读时==-1 */
				while((len=is.read(buffer))!=-1 ){
					/* 将每次读取到的输入按指定大小写入输出流中 */
					baos.write(buffer,0,len);
				}
				byte[] data = baos.toByteArray();
				Bitmap bitmap = BitmapFactory.decodeByteArray(buffer, 0, data.length);
				imageView.setImageBitmap(bitmap);
				
				
				
			}catch(Exception ex){
				Toast.makeText(MainActivity.this, "图片下载失败", 1000).show();
			}
			
		}
	};




猜你喜欢

转载自sunzone.iteye.com/blog/1884617