栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android使用URL读取网络资源的方法

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android使用URL读取网络资源的方法

URL(Uniform Resource Locator)是统一资源定位器,它是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。就通常情况而言,URL可以由协议名、主机、端口和资源组成。

URL类提供了多个构造器用于创建URL对象,一旦获得了URL对象之后,就可以调用如下常用方法来访问该URL对应的资源了。
->String getFile():获取此URL的资源名;
->String getHost():获取此URL的主机名;
->String getPath():获取此URL的路径部分;
->String getPort():获取此URL的端口号;
->String getProtocol():获取此URL的协议名称;
->String getQuery():获取此URL的查询字符串部分;
->URLConnection openConnection():返回一个URLConnection对象,它表示到URL所引用的远程对象的连接;
InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream。

URL对象中前几个方法都非常容易理解,而该对象提供的openStream()可以读取该URL资源的InputStream,通过该方法可以非常方便地读取远程资源。

下面的程序Demo示范了如何通过URL类读取远程资源。

layout/activity_main.xml界面布局代码如下:




  



MainActivity.java逻辑代码如下:

package com.fukaimei.urltest;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

  ImageView show;
  // 代表从网络下载得到的图片
  Bitmap bitmap;
  Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      if (msg.what == 0x123) {
 // 使用ImageView显示该图片
 show.setImageBitmap(bitmap);
      }
    }
  };

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    show = (ImageView) findViewById(R.id.show);
    new Thread() {
      @Override
      public void run() {
 try {
   // 定义一个URL对象
   URL url = new URL("http://172.xx.xxx.xxx:8080/fukaimei/android_vs_ios.jpg");
   // 打开该URL对应的资源的输入流
   InputStream is = url.openStream();
   // 从InputStream中解析出图片
   bitmap = BitmapFactory.decodeStream(is);
   // 发送消息,通知UI组件的资源的输入流
   handler.sendEmptyMessage(0x123);
   is.close();
   // 再次打开URL对应的资源的输入流
   is = url.openStream();
   // 打开手机文件对应的输入流
   OutputStream os = openFileOutput("android_vs_ios.jpg", MODE_PRIVATE);
   byte[] buff = new byte[1024];
   int hasRead = 0;
   // 将URL对应的资源下载到本地
   while ((hasRead = is.read(buff)) > 0) {
     os.write(buff, 0, hasRead);
   }
   is.close();
   os.close();
 } catch (Exception e) {
   e.printStackTrace();
 }
      }
    }.start();
  }
}


上面的程序Demo两次调用了URL对象的openStream()方法打开URL对应的资源的输入流,程序第一次使用BitmapFactory的decodeStream(InputStream)方法来解析该输入流中的图片;第二次则使用IO将输入流中的图片下载到本地。
注意:由于该程序需要访问互联网,因此还需要在清单文件AndroidManifest.xml文件中授权访问互联网的权限:


  

Demo程序运行效果界面截图如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/157588.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号