Retrofit网络编程Glide获取图片
简介
Retrofit是一个类型安全的HTTP客户端,用于Android和Java平台。它通过注解来定义HTTP请求,并将响应直接转换为Java对象。Retrofit的主要特点是它的简洁性和灵活性,它允许开发者以声明式的方式来描述网络请求,并且无缝地与OkHttp库集成,支持同步和异步调用、拦截器、多线程以及RxJava等响应式编程库的集成。
Glide则是一个专注于高效加载、展示图片和视频的库。它处理了图片加载的所有复杂性,包括从网络、本地存储或应用资源加载图片,以及图片的内存和磁盘缓存管理。Glide能自动管理资源,减少内存泄漏风险,同时提供了丰富的图片处理选项,如大小调整、裁剪和各种变换效果。
在实际开发中,这两个库常常协同工作,形成强大的数据和资源加载组合。典型的应用场景是:使用Retrofit负责从服务器获取数据(包括图片URLs),然后将这些URLs传递给Glide,由Glide负责从URL加载并显示图片。这种分工合作的方式使得开发者可以清晰地分离网络请求逻辑和图片加载逻辑,提高代码的可维护性和可读性。
一、添加依赖
com.github.bumptech.glide:compiler:4.13.1
com.squareup.retrofit2:retrofit:2.x.y
com.github.bumptech.glide:glide:4.13.1
com.squareup.retrofit2:converter-scalars:2.x.y
com.squareup.retrofit2:converter-gson:2.x.y
org.jsoup:jsoup:1.17.2
然后,在你想要显示图片的Activity或Fragment中,使用如下代码加载图片到ImageView:
搜索域名地址com.github.bumptech.glide
点击Apply应用:
依赖添加成功:
二、初始化Retrofit
这段代码构建了一个Retrofit客户端,它准备好了与指定的基础URL进行通信,并且配置为使用ScalarsConverterFactory
来处理响应体的转换。如果您打算从中国气象局的API获取JSON数据并映射到具体的Java对象上,您应该考虑替换转换器工厂为支持JSON解析的转换器(GsonConverterFactory.create())。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://weather.cma.cn/")
.addConverterFactory(ScalarsConverterFactory.create())
.build();
三、创建接口及访问网络的权限
访问网络的权限:
@GET("web/weather/57816.html")
: 这是一个Retrofit的注解,用来标记该接口方法是一个HTTP GET请求。括号内的字符串"web/weather/57816.html"
是请求的相对路径,它将会被自动追加到在Retrofit.Builder中设置的baseUrl后面。
public interface WHttp {
@GET("web/weather/57816.html")
Call<String> getHtmlContent();
}
四、
WHttp wHttp = retrofit.create(WHttp.class);
Call<String> call = wHttp.getHtmlContent();
五、
runOnUiThread(new Runnable() {
@Override
public void run() {
String html = response.body();
Document doc = Jsoup.parse(html);
String im = doc.select("img").attr("src");
RecyclerView recyclerView = findViewById(R.id.ReCy);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(linearLayoutManager);
ImgAdapter adapter = new ImgAdapter(MainActivity.this,list2);
recyclerView.setAdapter(adapter);
Elements imgUrl = doc.select("img");
for (Element url : imgUrl) {
String ur = url.attr("src");
String urs = "https://weather.cma.cn" + ur;
list2.add(urs); // 将URL添加到列表
}
StringBuilder urlsText = new StringBuilder();
for (String url : list2) {
urlsText.append(url).append("\n");
}
textView.setText(urlsText.toString()); // 设置TextView的文本为所有URL的字符串形式
}
});
六、