Retrofit中scalars轉換html為字符串

簡介

????????在Retrofit中,如果你想直接獲取HTML或其他文本格式的響應內容而不是將其映射到一個模型類,ScalarsConverterFactory 就派上用場了。ScalarsConverterFactory 是一個轉換器工廠,它能夠將響應體轉換為Java基本類型如String、Integer或Byte[]等標量值。對于解析HTML而言,最直接的應用就是將整個HTML內容作為字符串獲取。

一、附加依賴

添加依賴包為:

com.squareup.retrofit2:retrofit:2.x.y
com.squareup.retrofit2:converter-scalars:2.x.y
com.squareup.retrofit2:converter-gson:2.x.y
org.jsoup:jsoup:1.17.2

File中找到Project Structure:

? ? ? ? 添加Library Dependency

輸入網址域名com.squareup.retrofit2

附加成功:

ScalarsConverterFactory.create() 是Retrofit庫中的一個轉換器工廠方法,它允許Retrofit將HTTP響應體直接轉換為Java的基本類型或字符串等標量值,而不是轉換為特定的模型對象。這對于處理文本、JSON字符串或二進制數據等非結構化響應非常有用。

二、配置Retrofit

??初始化構建器(Retrofit):

????????new Retrofit.Builder()?創建了一個?Retrofit.Builder?實例。Builder 是一個設計模式,它允許你通過一系列配置步驟來創建復雜的對象。在這里,就是用來配置 Retrofit 的各種參數,最終構建出一個 Retrofit 實例。

baseUrl目標地址域名:

????????指定所有網絡請求的基礎 URL。這是所有相對路徑請求的基礎。

轉換器工廠ConverterFactory:

????????轉換器的作用是將從網絡請求得到的響應體轉換成 Java 對象。這里使用的 ScalarsConverterFactory 是專門用來處理文本類型的響應體,比如字符串、byte數組等。如果你的 API 返回的是 JSON 數據,通常會使用 GsonConverterFactoryMoshiConverterFactory。

?.build()完成構建:

????????最后,調用 build() 方法來完成 Retrofit 實例的創建。這一步會根據之前設置的所有配置項,構建出一個可用的 Retrofit 實例。

Retrofit retrofit = new Retrofit.Builder().baseUrl("https://your.api.base.url/").addConverterFactory(ScalarsConverterFactory.create()).build();

三、定義網址(API)接口

接下來,在定義API接口時,并定義網絡請求方法getHtmlContent(),可以聲明方法返回類型為Call<String>或其他標量類型,例如:

四、發起請求并處理響應

創建接口實例:

????????通過retrofit.create(WHttp.class)創建了一個接口WHttp的實例。這里假設WHttp接口定義了網絡請求的方法,如getHtmlContent(),這個方法對應于獲取HTML內容的網絡請求。

獲取html內容:

????????通過getHtmlContent()方法對應于獲取HTML內容的網絡請求。

enqueue異步請求:

????????call.enqueue()方法發起一個異步HTTP請求。這意味著當請求開始時,應用不會被阻塞,可以繼續處理其他任務。請求的結果會在主線程(UI線程)中通過onResponseonFailure回調方法通知。成功響應 (onResponse)與失敗響應 (onFailure)。

成功響應 (onResponse):成功響應就可獲取html內容,并做解析處理。

失敗響應 (onFailure):將錯誤信息通過Throwable t傳入,然后將錯誤信息簡單地設置到一個名為textView的TextView控件中展示給用戶。

五、Jsoup解析html

html解析內容:

response.body()獲取內容:

????????String html = response.body();: 從Retrofit的響應對象中獲取HTML內容。這是之前網絡請求的結果,存儲為一個字符串。

Jsoup解析(Document)html字符串:

????????Document doc = Jsoup.parse(html);: 使用Jsoup庫來解析這個HTML字符串,創建一個Document對象。Jsoup是一個用于解析HTML的Java庫,非常適用于提取和操作HTML數據。

Jsoup的選擇器語法:

????????String description = doc.select("meta[name=description]").attr("content");: 利用Jsoup的選擇器語法,從Document中選擇所有<meta>標簽,其中name屬性為description的元素,并從中提取content屬性的值。這通常用來獲取網頁的描述信息。

傳入數據UI控件顯示(setText):

????????textView.setText(description);: 最后,將提取到的描述信息設置給一個名為textView的TextView組件的文本內容。這將在UI界面上顯示提取到的描述信息。

六、啟用線程

?new Thread線程:

????????new Thread(new Runnable() { ... }): 創建一個新的線程。在Android中,網絡請求和耗時操作通常不應在主線程(UI線程)執行,以免阻塞UI導致應用無響應(ANR)。因此,這里使用一個新的線程來執行耗時的HTML解析操作。public void run() { ... }: 這是Runnable接口中的run方法,定義了在線程啟動(.start())后要執行的操作

  new Thread(new Runnable() {@Overridepublic void run() {runOnUiThread(new Runnable() {@Overridepublic void run() {String html = response.body();Document doc = Jsoup.parse(html);String description = doc.select("meta[name=description]").attr("content");textView.setText(description);}});}}).start();

?runOnUiThread?UI線程:

????????runOnUiThread(new Runnable() { ... }): 因為Android不允許在非UI線程直接更新UI組件,所以這里使用runOnUiThread方法來確保UI更新操作在主線程中執行。runOnUiThread是Activity或View的成員方法,可以接受一個Runnable對象,確保其在UI線程運行。public void run() { ... }: 這是第二個Runnable對象中的run方法,定義了要在UI線程執行的操作。

 runOnUiThread(new Runnable() {@Overridepublic void run() {String html = response.body();Document doc = Jsoup.parse(html);String description = doc.select("meta[name=description]").attr("content");textView.setText(description);}});

最終效果:

? ? ? ? 簡要總結:添加依賴包+初始化構建器(baseurl(地址域名),轉換器(ConverterFactory),build構建)+實例化接口+調用接口方法獲取數據+enqueue異步請求+線程+解析數據

?

?

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74119.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74119.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74119.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Powershell WSL Windows系統復制數據到ubuntu子系統系統

從本地D盤下拷貝數據到ubuntu子系統下 Powershell 管理員打開執行 /mnt/d 此處是本地Windows系統的路徑表示/opt ubutu 子系統目錄 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/從ubuntu子系統中拷貝數據到本地D盤下 Powershell 管理員打開執行…

【多線程】線程安全集合類,ConcurrentHashMap實現原理

文章目錄 線程安全集合類解決方案多線程環境使用順序表多線程環境使用隊列多線程環境使用哈希表ConcurrentHashMap1. 縮小鎖的粒度2. 充分使用 CAS3. 針對擴容操作 線程安全集合類 ArrayList、Queue、HsahMap… 都是線程不安全的 Vector、Stack、Hashtable 都是線程安全的&am…

spring-tx筆記

編程式事務與聲明式事務的理解 補充&#xff1a;什么是事務&#xff1f; 事務是一個重要概念&#xff0c;尤其在數據庫管理系統中。事務是指一組操作。&#xff0c;這些操作要么全部成功執行&#xff0c;要么全部不執行&#xff0c;確保數據的一致性和完整性 編程式事務 編…

Android第四次面試(Java基礎篇)

一、Java 中的 DCL 單例模式 單例模式是設計模式中最常用的模式之一&#xff0c;其核心目標是確保一個類在程序中僅有一個實例&#xff0c;并提供全局訪問點。在 Java 中&#xff0c;實現單例模式需要兼顧線程安全和性能優化。DCL&#xff08;Double-Checked Locking&#xff0…

Java-SpringBootWeb入門、Spring官方腳手架連接不上解決方法

一. Spring 官網&#xff1a;Spring | Home Spring發展到今天已經形成了一種開發生態圈&#xff0c;Spring提供了若干個子項目&#xff0c;每個項目用于完成特定的功能(Spring全家桶) Spring Boot可以幫助我們非常快速的構建應用程序、簡化開發、提高效率 。 二. Spring Boot入…

1.7 無窮小的比較

1.定義 2.性質 3.無窮小的比較 3.1等價無窮小的性質 3.2 常見等價無窮小

StarRocks 升級注意事項

前段時間升級了生產環境的 StarRocks&#xff0c;從 3.3.3 升級到了 3.3.9&#xff0c;期間還是踩了不少坑所以在這里記錄下。 因為我們的集群使用的是存算分離的版本&#xff0c;也是使用官方提供的 operator 部署在 kubernetes 里的&#xff0c;所以沒法按照官方的流程進入虛…

深入探究 JVM 堆的垃圾回收機制(一)— 判活

垃圾回收分為兩步&#xff1a;1&#xff09;判定對象是否存活。2&#xff09;將“消亡”的對象進行內存回收。 1 判定對象存活 可達性分析算法&#xff1a;通過一系列“GC Roots”對象作為起始節點集&#xff0c;從這些節點開始&#xff0c;根據引用關系向下搜索&#xff0c;…

國產開發板—米爾全志T113-i如何實現ARM+RISC-V+DSP協同計算?

近年來&#xff0c;隨著半導體產業的快速發展和技術的不斷迭代&#xff0c;物聯網設備種類繁多&#xff08;如智能家居、工業傳感器&#xff09;&#xff0c;對算力、功耗、實時性要求差異大&#xff0c;單一架構無法滿足所有需求。因此米爾推出MYD-YT113i開發板&#xff08;基…

Tomcat虛擬主機配置詳解:Centos環境下多域名部署(詳細教程!)

&#x1f3e1;作者主頁&#xff1a;點擊&#xff01; Tomcat服務器&#x1f4dd;專欄&#xff1a;點擊&#xff01; &#x1f427;Linux高級管理防護和群集專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2025年3月18日14點14分 最近在折騰 Tomcat 的時候&…

鴻蒙開發工程師簡歷項目撰寫全攻略

一、項目結構的黃金法則 建議采用「41」結構&#xff1a; 項目背景&#xff08;業務價值&#xff09;技術架構&#xff08;鴻蒙特性&#xff09;核心實現&#xff08;技術難點&#xff09;個人貢獻&#xff08;量化成果&#xff09;附加價值&#xff08;延伸影響&#xff09; …

dfs刷題排列問題 + 子集問題 + 組和問題總結

文章目錄 一、排列問題全排列II題解代碼 優美的排列題解代碼 二、子集問題字母大小寫全排列題解代碼 找出所有子集的異或總和再求和題解代碼 三、組合問題電話號碼的字母組合題解代碼 括號生成題解代碼 組合題解代碼 目標和題解代碼 組合總和題解代碼 總結 一、排列問題 全排列…

【Linux】VMware17 安裝 Ubuntu24.04 虛擬機

目錄 安裝教程 一、下載 Ubuntu 桌面版iso映像 二、安裝 VMware 三、安裝 Ubuntu 桌面版 VMware 創建虛擬機 掛載 Ubuntu ISO 安裝 Ubuntu 系統 安裝教程 一、下載 Ubuntu 桌面版iso映像 鏈接來自 清華大學開源軟件鏡像站 ISO文件地址&#xff1a;ubuntu-24.04.2-des…

CVPR2025 | 對抗樣本智能安全方向論文匯總 | 持續更新中~

匯總結果來源&#xff1a;CVPR 2025 Accepted Papers 若文中出現的 論文鏈接 和 GitHub鏈接 點不開&#xff0c;則說明還未公布&#xff0c;在公布后筆者會及時添加. 若筆者未及時添加&#xff0c;歡迎讀者告知. 文章根據題目關鍵詞搜索&#xff0c;可能會有遺漏. 若筆者出現…

PostgreSQL_數據回退,數據庫導出、導入

目錄 前置&#xff1a; 1 數據回退 1.1 代碼 1.2 pgAdmin4 中查看 1&#xff09;t_daily 2) t_stock_daily 2 數據庫導出、導入 前置&#xff1a; 本博文是一個系列。在本人“數據庫專欄”-》“PostgreSQL_”開頭的博文。 1 數據回退 上一節“PostgreSQL_數據下載并…

golang單機鎖實現

1、鎖的概念引入 首先&#xff0c;為什么需要鎖&#xff1f; 在并發編程中&#xff0c;多個線程或進程可能同時訪問和修改同一個共享資源&#xff08;例如變量、數據結構、文件&#xff09;等&#xff0c;若不引入合適的同步機制&#xff0c;會引發以下問題&#xff1a; 數據競…

【HarmonyOS Next】鴻蒙應用實現彈框DialogHub詳解

【HarmonyOS Next】鴻蒙應用實現彈框DialogHub詳解 一、前言 鴻蒙中實現彈框目前官方提供openCustomDialog和CustomDialog兩種模式。推薦前者&#xff0c;詳情見下圖和官網文檔鏈接&#xff1a; https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V14/arkts-u…

機器學習算法實戰——天氣數據分析(主頁有源碼)

?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連 ? ?個人主頁歡迎您的訪問 ?期待您的三連? ? ??? 1. 引言 天氣數據分析是氣象學和數據科學交叉領域的一個重要研究方向。隨著大數據技術的發展&#xff0c;氣象數據的采集、存儲和分…

輸電線路專業英語詞匯

輸電線路transmission line 雙回路double circuit 導線conductor 地線ground &#xff08;Earth&#xff09;wire 雙回路耐張塔double-circuit tension towers 直線塔tangent tower 地質Geological 水文Hydrological 塔位坐標Coordinate of Tower Location 轉角塔angle tower 直…

炫酷的3D按鈕效果實現 - CSS3高級特性應用

炫酷的3D按鈕效果實現 - CSS3高級特性應用 這里寫目錄標題 炫酷的3D按鈕效果實現 - CSS3高級特性應用項目介紹核心技術實現1. 基礎結構設計2. 視覺效果實現2.1 背景漸變2.2 立體感營造 3. 交互動效設計3.1 懸停效果3.2 按壓效果 技術要點分析1. 深度層次感2. 動畫過渡3. 性能優…