Retrofit使用
2019-03-08 本文已影响0人
努力生活的西鱼
Retrofit
Retrofit的使用
1. 在Gradle添加retrofit依赖
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.5.0'
2. 创建接收服务器返回数据的类
public class Reception {
...
// 根据返回数据的格式和数据解析方式(Json、XML等)定义
}
3. 创建用于描述网络请求的接口
public interface DataService {
/**
* 指定get请求方式,指定路径,有时候路径除了baseUrl还有一部分比如http://write.blog.csdn.net/mdeditor
* http://write.blog.csdn.net/ 一般是baseUrl
* 而mdeditor是相对路径的
* @param url
* @return
*/
@GET
Call<String> baidu(@Url String url);
}
4. 创建Retrofit实例
// 创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
// 指定baseUrl,这里有坑,最后后缀带着“/”
.baseUrl("https://www.baidu.com/")
// 设置内容格式,这种对应的数据返回值是String类型的
.addConverterFactory(ScalarsConverterFactory.create())
// 定义client类型
.client(new OkHttpClient())
// 创建
.build();
5. 创建网络请求接口实例
// 创建网络请求接口实例
DataService dataService = retrofit.create(DataService.class);
6. 发送网络请求
// 在这里又重新设定了下baidu的地址,是因为Retrofit要求传入具体,如果是绝对路径的话,路径会将baseUrl覆盖掉
Call<String> baidu = dataService.baidu("https://www.baidu.com/");
// 执行异步请求
baidu.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
Toast.makeText(MainActivity.this, ""+response.body(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
});