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

作者:_彼岸雨敲窗_ 时间:2023-07-27 10:56:39 

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界面布局代码如下:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">

<ImageView
   android:id="@+id/show"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:scaleType="fitCenter" />
</LinearLayout>

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文件中授权访问互联网的权限:


<!-- 授权访问互联网-->
 <uses-permission android:name="android.permission.INTERNET" />

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

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

来源:http://blog.csdn.net/fukaimei/article/details/78220143

标签:Android,URL,网络资源
0
投稿

猜你喜欢

  • Android的Activity跳转动画各种效果整理

    2022-05-05 03:43:35
  • 实战SpringBoot集成JWT实现token验证

    2022-10-07 15:57:49
  • 详解SpringMVC中的日期处理和文件上传操作

    2021-11-13 05:39:18
  • SpringBoot浅析Redis访问操作使用

    2022-09-26 02:09:18
  • SpringMVC文件上传 多文件上传实例

    2023-05-01 02:25:31
  • 谈谈HttpClient使用详解

    2022-11-03 08:19:02
  • java连接ElasticSearch集群操作

    2023-11-28 04:06:24
  • Java经典面试题汇总--多线程

    2023-07-13 01:17:48
  • Java装饰器设计模式初探

    2021-08-17 17:23:46
  • java 定时器线程池(ScheduledThreadPoolExecutor)的实现

    2023-03-31 20:52:10
  • Android RadarView雷达图(蜘蛛网图)的实现代码

    2022-12-09 21:45:19
  • Android 自定义一套 Dialog通用提示框 (代码库)

    2022-10-08 06:20:31
  • android开发基础教程—三种方式实现xml文件解析

    2021-06-21 21:24:25
  • SpringCloud迈向云原生的步骤

    2023-08-21 22:59:46
  • Android mvvm之LiveData原理案例详解

    2023-09-29 11:49:26
  • Java实现断点续传功能的示例代码

    2021-12-27 10:07:56
  • Android中的HOOK技术是什么

    2022-06-19 18:18:24
  • Flutter系列重学Container示例详解

    2023-07-19 00:46:10
  • JAVA实现社会统一信用代码校验的方法

    2023-04-10 08:38:21
  • Java实现堆排序(Heapsort)实例代码

    2023-06-15 02:02:11
  • asp之家 软件编程 m.aspxhome.com