目录1. Retrofit使用2. Retrofit封装3. RetrofitUtil使用最后1. Retrofit使用 Retrofit是一个现在网络请求框架,先来说一下怎么使用
网络权限(添加到AndroidManifest.xml)
<uses-permission android:name="android.permission.INTERNET" />
gradle依赖(添加到build.gradle)
implementation("com.squareup.okHttp3:okhttp:4.9.2")
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:converter-Scalars:2.9.0'
定义接口,网络请求的方法
public interface Request {
@GET("/xx/xx")
Call<ResponseBody> get();
}
实例化Retrofit
Retrofit retrofit = new Retrofit.Builder().baseUrl("BASE_URL").build();
通过Retrofit实例创建接口服务对象
Request request = retrofit.create(Request.class);
调用接口中的方法
Call<ResponseBody> call = request.get();
执行异步请求(同步请求需要创建一个新的线程去执行)
call.enqueue(new retrofit2.Callback<ResponseBody>() {
@Override
public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
}
@Override
public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
}
});
以上可以看出Retrofit是个好东西,可是用起来是比较麻烦的,所有在实际使用中对Retrofit进行一下小小的封装是很有必要的。
定义接口(所有的请求参数都是以map的形式)
public interface Request {
@GET()
Call<ResponseBody> get(@Url String url);
@GET()
Call<ResponseBody> get(@Url String url, @QueryMap Map<String,String> map);
@POST()
Call<ResponseBody> post(@Url String url);
@POST()
@FORMUrlEncoded
Call<ResponseBody> post(@Url String url, @FieldMap Map<String,String> map);
}
定义RetrofitManager,以单例模式获取Retrofit实例
public enum RetrofitManager {
INSTANCE;
private static final String BASE_URL = " Your BASE_URL";
private Retrofit retrofit;
public Retrofit getRetrofit(){
if(retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.build();
}
return retrofit;
}
}
自定义的RetrofitCallback,在发送请求时,通过匿名对象作为参数获取后端的响应结果。
public abstract class RetrofitCallback {
public void onStart(){
//开启loading
}
public void onCompleted(){
//关闭loading
}
public abstract void onSuccess(String resultJSONString);
public abstract void onError(Throwable t);
public void serverErrMsg(){
//xxx
}
public void reqErrMsg(){
//xxx
}
public void okMsg(){
//xxx
}
}
定义RetrofitUtil,封装get和post方法。将RetrofitCallback作为请求参数,在发送请求时重写onSuccess和onError方法,执行具体的操作。
public class RetrofitUtil {
private Retrofit(){}
public static void get(String url, RetrofitCallback callback){
sendRequest(getRequest().get(url),callback);
}
public static void get(String url, Map<String,String> map, RetrofitCallback callback){
sendRequest(getRequest().get(url,map),callback);
}
public static void post(String url, RetrofitCallback callback){
sendRequest(getRequest().post(url), callback);
}
public static void post(String url, Map<String,String> map, RetrofitCallback callback){
sendRequest(getRequest().post(url,map), callback);
}
private static Request getRequest(){
Retrofit retrofit = RetrofitManager.INSTANCE.getRetrofit();
return retrofit.create(Request.class);
}
private void sendRequest(Call<ResponseBody> call,RetrofitCallback callback){
//开启loading
callback.onStart();
//异步请求
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
//关闭loading
callback.onCompleted();
if(response.isSuccessful()){
//执行RetrofitCallback的onSuccess方法,获取响应结果的json字符串
try {
String result = response.body().string();
callback.onSuccess(result);
//响应成功
if(StringUtils.equals(result, Constant.SUCCESS)){
callback.okMsg();
}
} catch (IOException e) {
e.printStackTrace();
}
}else{
//服务异常
callback.serverErrMsg();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
callback.onCompleted();
//请求失败
callback.onError(t);
callback.reqErrMsg();
}
}
});
}
}
get无参请求
RetrofitUtil.get("/xx/xx", new RetrofitCallback() {
@Override
public void onSuccess(String resultJsonString) {
}
@Override
public void onError(Throwable t) {
}
});
get有参请求
Map<String,String> map = new HashMap<>(16);
map.put("key","value");
//xxx
RetrofitUtil.get("/xx/xx", map,new RetrofitCallback() {
@Override
public void onSuccess(String resultJsonString) {
xxxx
}
@Override
public void onError(Throwable t) {
xxxx
}
});
post请求和get的使用方法相似
本次只对get和post进行了封装,项目中只用到了这些就没有对文件上传下载以及别的请求方式进行封装。且没有添加转换器,可在RetrofitManager的getRetrofit()方法中自行添加。大概的封装思路就是这样的,可以自行发挥。
此文也只是在记录项目中对Retrofit的使用,对Retrofit的原理并没有较深的了解。
到此这篇关于android Retrofit2网络请求封装介绍的文章就介绍到这了,更多相关android Retrofit2网络封装内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: androidRetrofit2网络请求封装介绍
本文链接: https://www.lsjlt.com/news/161213.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0