IT评测·应用市场-qidao123.com
标题:
Retrofit中scalars转换html为字符串
[打印本页]
作者:
莱莱
时间:
2025-3-22 04:38
标题:
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 数据,通常会利用 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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4