<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
安卓開發網路請求可謂是安卓開發的靈魂,如果你不會網路請求,那麼你開發的應用軟體就是一具沒有靈魂的枯骨。
在安卓開發中進行網路請求和java中的網路請求有異曲同工之妙,但是安卓軟體畢竟的安裝在我們手機上的,而平常的應用軟體下載後會要求你給與許可權,否則就沒辦法使用,網路請求也需要對應的許可權,否則就沒法進行聯網操作。
首先在AndroidManifest.xml檔案中新增網路請求許可權。要在manifest標籤內,application標籤外新增
<uses-permission android:name="android.permission.INTERNET" />
新建java檔案,建立靜態方法,返回請求後的結果
package com.example.smartcity.Net; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class Internet { public static String get(String src){ HttpURLConnection connection = null; BufferedReader reader = null; StringBuilder response = null; try{ URL url = new URL(src);//新建URL connection = (HttpURLConnection)url.openConnection();//發起網路請求 connection.setRequestMethod("GET");//請求方式 connection.setConnectTimeout(8000);//連線最大時間 connection.setReadTimeout(8000);//讀取最大時間 InputStream in = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(in));//寫入reader response = new StringBuilder(); String line; while((line = reader.readLine()) != null){ response.append(line); } }catch (Exception e){//異常丟擲 e.printStackTrace(); }finally { if(reader != null){ try{ reader.close();//io流開了要關,不然容易記憶體洩露 }catch (IOException e){ e.printStackTrace(); } } if(connection != null){ connection.disconnect();//同理,關閉http連線 } } return response.toString(); } }
我們寫好了一個最基本的不帶任何框架的網路請求方法,該方法支援不帶Header的get請求,能夠通過get方法獲取到我們想要的資料,這裡responese是StringBuffer類是因為在獲取到了BufferedReader後,要通過while迴圈將資料寫入String中,StringBuffer類對比String類來說更適合進行這種頻繁寫入的操作。
接下來讓我們去使用我們的這個方法進行一個最基本的網路請求吧,我們通過get方法請求一下百度的網址看看他會返回什麼給我們。
在MainActivity的onCreate方法中進行網路請求
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String s = Internet.get("https://www.baidu.com"); System.out.println(s); }
是不是以為這就結束了?錯!
安卓開發中網路請求操作是一種耗時操作,安卓中不允許在主執行緒中進行網路請求操作,java程式碼的執行規律是自上而下,一旦中途發生網路請求這種耗時操作,單反你網路卡一點,或者沒有網路,那麼下面的程式碼都會被卡死,無法執行,容易造成執行緒堵塞,就像堵車一樣。所以我們要例外開一條路疏通車流,這就是子執行緒。
我們的網路請求需要在子執行緒中去進行,在安卓開發中開啟子執行緒非常的簡單,無需為了這個執行緒新建一個方法或類。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread(new Runnable() { @Override public void run() { String s = Internet.get("https://www.baidu.com"); System.out.println(s); } }).start(); }
那麼我們看看能拿到什麼東西吧
我們看到,我們成功拿到了百度首頁的html資料,這邊我們也可以在瀏覽器上開啟百度,然後f12檢視是一樣的。
相信你們試驗一下,會發現有時會爆出錯誤資訊
Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
這是因為android自2019年11月1日起不在執行http請求。那麼我們要怎樣去解決這個問題呢
1、降低sdk版本
在build.gradle(app)中修改targetSdkVersion和minSdkVersion為26,這是安卓8.0對應的sdk版本
2、設定network-security-config
在AndroidManifest.xml檔案的application標籤中新增一行
android:networkSecurityConfig="@xml/network"
在res檔案下新建xml資料夾,然後新建network.xml檔案,將如下程式碼貼上至檔案內,該檔案內只保留下列程式碼即可
<?xml version="1.0" encoding="utf-8"?> <!--Android 9.0 http請求適配--> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
獲取到網路資料後修改ui檢視
相信不少同學在獲取到資料後就想去嘗試將textview或者其他的元件中的text修改成自己拿到的資料吧。
在修改前,我們要注意些問題:首先,安卓開發中你無法在子執行緒中操作ui,否則會爆出Only the original thread that created a view hierarchy can touch its views.錯誤,那麼我們該怎麼去修改檢視呢。
答案很簡單,android的Activity類給了我們這個一個方法runOnUiThread方法,它能夠在子執行緒中去修改ui檢視,它的使用也很簡單
runOnUiThread(new Runnable() { @Override public void run() { button.setText(s);//修改檢視 } });
那麼,我們得出最終的程式碼
new Thread(new Runnable() { @Override public void run() { String s = Internet.get("http://www.baidu.com"); runOnUiThread(new Runnable() { @Override public void run() { button.setTag(s); } }); System.out.println(s); } }).start();
這樣就可以實現最簡單的網路請求修改資料了。
到此這篇關於一文帶你瞭解Android中的網路請求的文章就介紹到這了,更多相關Android網路請求內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45