Android使用URL讀取網(wǎng)絡(luò)資源的方法
URL(Uniform Resource Locator)是統(tǒng)一資源定位器,它是對可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯(lián)網(wǎng)上標準資源的地址?;ヂ?lián)網(wǎng)上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它。就通常情況而言,URL可以由協(xié)議名、主機、端口和資源組成。
URL類提供了多個構(gòu)造器用于創(chuàng)建URL對象,一旦獲得了URL對象之后,就可以調(diào)用如下常用方法來訪問該URL對應(yīng)的資源了。
->String getFile():獲取此URL的資源名;
->String getHost():獲取此URL的主機名;
->String getPath():獲取此URL的路徑部分;
->String getPort():獲取此URL的端口號;
->String getProtocol():獲取此URL的協(xié)議名稱;
->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;
// 代表從網(wǎng)絡(luò)下載得到的圖片
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對應(yīng)的資源的輸入流
InputStream is = url.openStream();
// 從InputStream中解析出圖片
bitmap = BitmapFactory.decodeStream(is);
// 發(fā)送消息,通知UI組件的資源的輸入流
handler.sendEmptyMessage(0x123);
is.close();
// 再次打開URL對應(yīng)的資源的輸入流
is = url.openStream();
// 打開手機文件對應(yīng)的輸入流
OutputStream os = openFileOutput("android_vs_ios.jpg", MODE_PRIVATE);
byte[] buff = new byte[1024];
int hasRead = 0;
// 將URL對應(yīng)的資源下載到本地
while ((hasRead = is.read(buff)) > 0) {
os.write(buff, 0, hasRead);
}
is.close();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
上面的程序Demo兩次調(diào)用了URL對象的openStream()方法打開URL對應(yīng)的資源的輸入流,程序第一次使用BitmapFactory的decodeStream(InputStream)方法來解析該輸入流中的圖片;第二次則使用IO將輸入流中的圖片下載到本地。
注意:由于該程序需要訪問互聯(lián)網(wǎng),因此還需要在清單文件AndroidManifest.xml文件中授權(quán)訪問互聯(lián)網(wǎng)的權(quán)限:
<!-- 授權(quán)訪問互聯(lián)網(wǎng)--> <uses-permission android:name="android.permission.INTERNET" />
Demo程序運行效果界面截圖如下:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
分享Android 藍牙4.0(ble)開發(fā)的解決方案
這篇文章主要為大家分享了Android 藍牙4.0(ble)開發(fā)的解決方案,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-03-03
Android 將 android view 的位置設(shè)為右下角的解決方法
Android 將 android view 的位置設(shè)為右下角的解決方法,需要的朋友可以參考一下2013-05-05
Android Style.xml的應(yīng)用詳解及代碼實現(xiàn)
這篇文章主要介紹了Android Style.xml的應(yīng)用詳解及代碼實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2016-10-10
詳談OnTouchListener與OnGestureListener的區(qū)別
下面小編就為大家?guī)硪黄斦凮nTouchListener與OnGestureListener的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Android?IdleHandler基本使用及應(yīng)用案例詳解
這篇文章主要為大家詳細介紹了Android?IdleHandler的基本使用及應(yīng)用案例,文中的示例代碼講解詳細,具有一定的參考價值,需要的可以參考一下2022-10-10
Android編程讀取Assets所有文件(遍歷每一個文件夾)并存入sdcard的方法
這篇文章主要介紹了Android編程讀取Assets所有文件(遍歷每一個文件夾)并存入sdcard的方法,涉及Android針對文件與目錄的遍歷及I/O操作相關(guān)技巧,需要的朋友可以參考下2016-02-02
kotlin中的模塊化結(jié)構(gòu)組件及工作原理
本文介紹了Kotlin中模塊化結(jié)構(gòu)組件,包括ViewModel、LiveData、Room和Navigation的工作原理和基礎(chǔ)使用,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-03-03
替換so文件來動態(tài)替換Flutter代碼實現(xiàn)詳解
這篇文章主要為大家介紹了替換so文件來動態(tài)替換Flutter代碼實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01

