论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
大数据
›
数据仓库与分析
›
Retrofit中scalars转换html为字符串
Retrofit中scalars转换html为字符串
莱莱
论坛元老
|
2025-3-22 04:38:13
|
显示全部楼层
|
阅读模式
楼主
主题
1009
|
帖子
1009
|
积分
3027
简介
在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 数据,通常会利用 GsonConverterFactory 或 MoshiConverterFactory。
.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线程)中通过onResponse或onFailure回调方法关照。
成功响应 (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() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public 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() {
@Override
public 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异步请求+线程+解析数据
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
莱莱
论坛元老
这个人很懒什么都没写!
楼主热帖
SQL的约束
HCIA-OSPF协议
mac Error: EACCES: permission denied ...
MySQL 隐式类型转换导致索引失效问题 ...
攻防世界web 难度1新手练习
你选对了超融合,可能却买错了交换机! ...
红标devcpp6.3编译器下载及配置教程 ...
MySQL实战45讲 9
每日一练 数据库linux安装
老妈问我什么是超融合,我是这么和她解 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
网络安全
鸿蒙
5G
快速回复
返回顶部
返回列表