学向勤中得,萤窗万卷书。这篇文章主要讲述AndroidRetrofi的基础使用教程相关的知识,希望能为你提供帮助。
简单的记录一下Retrofit的使用方法文章参考学习自 阳光沙滩
,是我在B站上发现的宝藏Up主,超级棒!
【AndroidRetrofi的基础使用教程】在前段时间我写了一个java web后台,想做一个安卓端的打卡社区,后来发现请求和解析过于麻烦,就耽搁了。
趁着空闲,研究了一下大部分项目中都采用的MVP+RxJava+Retrofit模式中的Retrofit,发现异常好用,特此记录一下。
环境配置
implementation \'com.squareup.retrofit2:retrofit:2.7.1\'
retrofit是基于okhttp的二次封装,在上一次文章中我们介绍了Gson这个强大的工具(点我跳转),这里retrofit也提供了配套的基于Gson的转换器
implementation \'com.squareup.retrofit2:converter-gson:2.4.0\'
都导入进来吧~
另外,由于安卓9.0禁止明文传输,需要单独设置一下:
联网权限
< uses-permission android:name="android.permission.INTERNET" />
允许明文访问
android:usesCleartextTraffic="true"
另外,请在build.gradle(app)中开启java 1.8支持
compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 }
请求接口设置retrofit在请求时候是使用注解来说明请求方式的
写法同springboot的controller层相似
都是注解(路径)+方法(传参)
这里主要介绍几个比较常用的
后台使用的是 https://gitee.com/sunofbeaches/SOBAndroidMiniWeb
所有注解都应该写在一个接口类中,这里命名为API.class
Retrofit初始化
private static Retrofit retrofit=new Retrofit.Builder() .baseUrl("http://10.0.2.2:9102") .addConverterFactory(GsonConverterFactory.create())//增加一个转换工厂 .build();
值得一提的是,这里的10.0.2.2是安卓虚拟机访问电脑的ip地址
无参Get请求这里@get代表get请求,后面是绝对路径
@GET("/get/text") Call< JsonResult> getJson();
方法体的返回类型都是Call< T>
这个也不难理解,在okhttp中返回的是一个ResponseBody
然后我们需要使用Gson对这个字符串进行解析再转成对象
而有了Retrofit以后我们可以直接让他自动解析转成相应类型
有参Get请求
@GET("/get/param") Call< GetWithParamsResult> getWithParams(@Query("keyword")String keyword, @Query("page")int page, @Query("order")int order);
参数的格式为:@Query(‘参数名称’)参数类型 变量名称
当然如果参数很多,你可以直接使用Map来传值,即
@GET("/get/param") Call< GetWithParamsResult> getWithParams(@QueryMap Map< String,Object> params);
POST请求
@POST("/post/string") Call< PostWithParamsResult> postWithParams(@Query("string")String content);
同理,这里只需要把注解改成@POST即可。
提一下,我们在设置返回类型的时候,可以使用一个工具:GsonFormat,把返回的json丢进去,会自动分析并生成对应的Bean类,非常方便
如何使用在设置好接口后,我们就可以实例化接口对象了。
public void postWithParams(View view) { Retrofit retrofit = RetrofitManager.getRetrofit(); //获得一个Retrofit对象 API api = retrofit.create(API.class); //通过接口创建一个API实体 Call< PostWithParamsResult> c = api.postWithParams("hello world"); //由接口获取相应的请求方法 c.enqueue(new Callback< PostWithParamsResult> () { @Override public void onResponse(Call< PostWithParamsResult> call, Response< PostWithParamsResult> response) { //我们可以看到,这里的Call的结果已经自动转变成实体对象了 //只需要使用response.body()即可获得 //在获取之前我们可以先判断一下状态 if(response.code()== HttpURLConnection.HTTP_OK){//判断是否请求成功 PostWithParamsResult result=response.body(); //TODO }}@Override public void onFailure(Call< PostWithParamsResult> call, Throwable t) {} }); }
我们可以看出,使用retrofit大大减少了我们配置、解析结果的代码量,非常方便。
同时将请求方法全部写在接口中,方便修改,简洁明了~
推荐阅读
- Android Studio学习路程(11)
- call和apply区别
- 一文读懂H5/App/小程序的区别
- 使用SAP WebIDE进行SAP Cloud Platform Business Application开发
- 疫情防范APP开发
- Windows上面搭建FlutterAndroid运行环境
- 如何更改Docker sock文件的位置()
- 如何在CentOS/RHEL上构建和安装最新的cURL版本()
- 如何在Ubuntu 18上安装Kubernetes()