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程序运行效果界面截图如下:
凡尔赛法环免广告版 最新版v1.69.1
下载天煞异种 安卓版v1.0.21
下载十三月 (Undecember)最新官方中文版v3.26.0200
下载我不是废柴无限99999钻999999金币游戏 不减反增版v1.2.16
下载我的女友是声优免广告 安卓版v1
我的女友是声优免广告是一款非常好玩的模拟经营类手游,玩家在游
石器帝国去广告版 v8
石器帝国免广告版是游戏的破解版本,在该版本中为玩家去除了广告
校园恋爱模拟器真人版去广告版 v0.0.7
校园恋爱模拟器真人版免广告版是游戏的破解版本,在该版本中为玩
教练我要开球馆内置菜单修改器 安卓版v1.5.4
教练我要开球馆内购版是一款模拟经营类游戏,玩家们将在游戏中创
我的游轮无限砖石 安卓版v1.7.0
我的游轮无限金币钻石版是一款模拟经营类游戏,你将成为一艘游轮