欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 之 使用URL访问网络资源

程序员文章站 2022-03-02 19:49:01
...
通过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();
			}
			
		}
	};