以前一直用OkHttp网络框架,最近换Retrofit2,顺便整理笔记
整理分为7步:
1.导入开源库(Retrofit、OkHttp,数据解析器集成)
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
//okhttp
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
//数据解析器集成(gson)
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
2.创建接口设置请求类型与参数
3.创建Retrofit对象、设置数据解析器
4.生成接口对象
5.调用接口方法返回call对象
6.发送请求(同步、异步)
* 同步:调用Call对象的execute(),返回结果的响应体
* 异步:调用call对象的enqueue(),参数是一个回调
7.处理返回的数据
get请求完整代码(带实体解析数据版)
请求代码:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://suggest.taobao.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
DataService dataService = retrofit.create(DataService.class);
Call<DataMode> call =dataService.suggest("utf-8","衣服");
call.enqueue(new Callback<DataMode>() {
@Override
public void onResponse(Call<DataMode> call, Response<DataMode> response) {
LogUtils.d("成功",response.body().getResult());
}
@Override
public void onFailure(Call<DataMode> call, Throwable t) {
LogUtils.d("失败",t);
}
});
DataService代码:
public interface DataService {
//https://suggest.taobao.com/sug?code=utf-8&q=关键字
@GET("sug")
Call<DataMode> suggest(@Query("code") String code, @Query("q") String q);
}
DataMode代码:
public class DataMode {
private List<List<String>> result;
public List<List<String>> getResult() {
return result;
}
public void setResult(List<List<String>> result) {
this.result = result;
}
}
get完整代码(设置请求头、通用请求不带实体解析数据)
//设置请求头方法1,这里使用OKHTTP添加请求头方法
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.header("User-Agent", "Your-App-Name")
.header("Accept", "application/vnd.yourapi.v1.full+json")
.method(original.method(), original.body())
.build();
return chain.proceed(request);
}
}).retryOnConnectionFailure(true)
.build();
//把client设置给retrofit ,这样就完成添加请求头
Retrofit retrofit = new Retrofit.Builder()
.client(client)
.baseUrl("https://suggest.taobao.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
DataService dataService = retrofit.create(DataService.class);
Call<ResponseBody> call =dataService.suggest("utf-8","衣服");
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
final byte[] stringsrc=response.body().bytes();
String resutf8=new String(stringsrc,"utf-8");
LogUtils.d("成功",resutf8);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
LogUtils.d("失败",t);
}
});
DataService代码:
public interface DataService {
//设置请求头方法1,添加多个Header参数
@Headers({
"Accept: application/vnd.yourapi.v1.full+json",
"User-Agent: Your-App-Name"
})
@GET("sug")
//设置请求头方法1,使用注解的方式,但是Header参数每次提交的都不同,也就是动态的Header
Call<ResponseBody> suggest(@Header("Content-Range") String contentRange, @Query("code") String code, @Query("q") String q);
}
POST请求代码(只修改DataService)
public interface DataService {
@Headers({
"Accept: application/vnd.yourapi.v1.full+json",
"User-Agent: Your-App-Name"
})
@FormUrlEncoded
@POST("sug")
Call<ResponseBody> suggest(@Field("code") String code, @Field("q") String q);
}
网友评论