使用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

//测试:使用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 访问网络图片:

// 测试:通过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();

            }

            

        }

    };

 

你可能感兴趣的:(url)