最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你了解Android中的網(wǎng)絡請求

 更新時間:2022年11月24日 14:41:38   作者:高同學,你好  
安卓開發(fā)網(wǎng)絡請求可謂是安卓開發(fā)的靈魂,如果你不會網(wǎng)絡請求,那么你開發(fā)的應用軟件就是一具沒有靈魂的枯骨。本文主要為大家介紹的是Android的網(wǎng)絡請求,感興趣的可以跟隨小編一起學習一下

安卓開發(fā)網(wǎng)絡請求可謂是安卓開發(fā)的靈魂,如果你不會網(wǎng)絡請求,那么你開發(fā)的應用軟件就是一具沒有靈魂的枯骨。

在安卓開發(fā)中進行網(wǎng)絡請求和java中的網(wǎng)絡請求有異曲同工之妙,但是安卓軟件畢竟的安裝在我們手機上的,而平常的應用軟件下載后會要求你給與權限,否則就沒辦法使用,網(wǎng)絡請求也需要對應的權限,否則就沒法進行聯(lián)網(wǎng)操作。

首先在AndroidManifest.xml文件中添加網(wǎng)絡請求權限。要在manifest標簽內(nèi),application標簽外添加

<uses-permission android:name="android.permission.INTERNET" />

新建java文件,創(chuàng)建靜態(tài)方法,返回請求后的結果

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();//發(fā)起網(wǎng)絡請求
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流開了要關,不然容易內(nèi)存泄露
}catch (IOException e){
e.printStackTrace();
}
}
if(connection != null){
connection.disconnect();//同理,關閉http連接
}
}
return response.toString();
}
}

我們寫好了一個最基本的不帶任何框架的網(wǎng)絡請求方法,該方法支持不帶Header的get請求,能夠通過get方法獲取到我們想要的數(shù)據(jù),這里responese是StringBuffer類是因為在獲取到了BufferedReader后,要通過while循環(huán)將數(shù)據(jù)寫入String中,StringBuffer類對比String類來說更適合進行這種頻繁寫入的操作。

接下來讓我們?nèi)ナ褂梦覀兊倪@個方法進行一個最基本的網(wǎng)絡請求吧,我們通過get方法請求一下百度的網(wǎng)址看看他會返回什么給我們。

在MainActivity的onCreate方法中進行網(wǎng)絡請求

@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);
}

是不是以為這就結束了?錯!

安卓開發(fā)中網(wǎng)絡請求操作是一種耗時操作,安卓中不允許在主線程中進行網(wǎng)絡請求操作,java代碼的運行規(guī)律是自上而下,一旦中途發(fā)生網(wǎng)絡請求這種耗時操作,單反你網(wǎng)卡一點,或者沒有網(wǎng)絡,那么下面的代碼都會被卡死,無法執(zhí)行,容易造成線程堵塞,就像堵車一樣。所以我們要例外開一條路疏通車流,這就是子線程。

我們的網(wǎng)絡請求需要在子線程中去進行,在安卓開發(fā)中開啟子線程非常的簡單,無需為了這個線程新建一個方法或類。

@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數(shù)據(jù),這邊我們也可以在瀏覽器上打開百度,然后f12查看是一樣的。

相信你們試驗一下,會發(fā)現(xiàn)有時會爆出錯誤信息

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文件,將如下代碼粘貼至文件內(nèi),該文件內(nèi)只保留下列代碼即可

<?xml version="1.0" encoding="utf-8"?>
<!--Android 9.0 http請求適配-->
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

獲取到網(wǎng)絡數(shù)據(jù)后修改ui視圖

相信不少同學在獲取到數(shù)據(jù)后就想去嘗試將textview或者其他的組件中的text修改成自己拿到的數(shù)據(jù)吧。

在修改前,我們要注意些問題:首先,安卓開發(fā)中你無法在子線程中操作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();

這樣就可以實現(xiàn)最簡單的網(wǎng)絡請求修改數(shù)據(jù)了。

到此這篇關于一文帶你了解Android中的網(wǎng)絡請求的文章就介紹到這了,更多相關Android網(wǎng)絡請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Kotlin協(xié)程Context應用使用示例詳解

    Kotlin協(xié)程Context應用使用示例詳解

    這篇文章主要為大家介紹了Kotlin協(xié)程Context應用使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Android消息循環(huán)機制源碼深入理解

    Android消息循環(huán)機制源碼深入理解

    這篇文章主要介紹了Android消息循環(huán)機制源碼深入理解的相關資料,需要的朋友可以參考下
    2017-07-07
  • Android仿微信長按菜單效果

    Android仿微信長按菜單效果

    這篇文章主要為大家詳細介紹了Android仿微信長按菜單效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android使用貝塞爾曲線畫心形

    Android使用貝塞爾曲線畫心形

    這篇文章主要為大家詳細介紹了Android使用貝塞爾曲線畫心形,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Android實現(xiàn)實時搜索框功能

    Android實現(xiàn)實時搜索框功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)實時搜索框功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Android Activity中使用Intent實現(xiàn)頁面跳轉與參數(shù)傳遞的方法

    Android Activity中使用Intent實現(xiàn)頁面跳轉與參數(shù)傳遞的方法

    這篇文章主要介紹了Android Activity中使用Intent實現(xiàn)頁面跳轉與參數(shù)傳遞的方法,結合實例形式簡單分析了Android中的Activity交互操作相關技巧,需要的朋友可以參考下
    2016-07-07
  • 搭建簡易藍牙定位系統(tǒng)的實現(xiàn)方法

    搭建簡易藍牙定位系統(tǒng)的實現(xiàn)方法

    下面小編就為大家?guī)硪黄罱ê喴姿{牙定位系統(tǒng)的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 詳解Android內(nèi)存泄露及優(yōu)化方案

    詳解Android內(nèi)存泄露及優(yōu)化方案

    這篇文章主要介紹了詳解Android內(nèi)存泄露及優(yōu)化方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Flutter使用sqflite處理數(shù)據(jù)表變更的方法詳解

    Flutter使用sqflite處理數(shù)據(jù)表變更的方法詳解

    了解過數(shù)據(jù)庫的同學應該會知道,數(shù)據(jù)表結構是可能發(fā)生改變的。所以本文為大家介紹了Flutter?使用?sqflite?處理數(shù)據(jù)表變更的版本升級處理方法,感興趣的可以了解一下
    2023-04-04
  • Android中WindowManager與WMS的解析

    Android中WindowManager與WMS的解析

    今天小編就為大家分享一篇關于Android中WindowManager與WMS的解析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論

正安县| 南部县| 定日县| 桐柏县| 华坪县| 石景山区| 闸北区| 海宁市| 钟山县| 溆浦县| 北海市| 林口县| 青铜峡市| 万宁市| 宾阳县| 安徽省| 富锦市| 镇雄县| 永城市| 通道| 西华县| 太原市| 隆昌县| 万安县| 江阴市| 乐至县| 房产| 铜鼓县| 西林县| 五峰| 延吉市| SHOW| 宁陵县| 紫阳县| 临朐县| 藁城市| 长丰县| 夏邑县| 项城市| 安化县| 铜梁县|