Retrofit 的初步踩坑

2018-05-07  本文已影响0人  luoye呀

android 的网络访问框架贼多。Retrofit  借群大佬说的一句话“安卓retrofit是设计最优秀的”。

由于 我之前使用的是廖大佬的 okgo ,但是 用kotlin  之后,感觉没有回调成功,自己又菜,没有找到为啥没有回调成功,又不想统一java 回调,然后决定 涉及下其他的。于是Retrofit 便成了目标之一。

http://square.github.io/retrofit/  官网教程。

现在 google 一下到处都是这个教程。

集成方式:

api'com.squareup.retrofit2:retrofit:2.4.0' 

然后 坑的是,如果不添加 string 运行时候会提示 错误,反正就是让你 再集成一个 api'com.squareup.retrofit2:converter-scalars:2.3.0'  android 3.0  以上就用implementation 和api 了,api 有点像public  在lib 中集成了,app 中也可以调用 api 导入的lib. 具体有那些 可以添加的依赖 官方文档上写得很完整。

添加到gradle 中 之后。就可以开始搬砖了。

api'com.squareup.retrofit2:retrofit:2.4.0'

api'com.squareup.retrofit2:converter-gson:2.3.0'

// 字符串依赖(根据需要选择)

api'com.squareup.retrofit2:converter-scalars:2.3.0'

首先创建一个接口。比如这样:

因为是接口,所以所有的变量都是final 的,属于不可再次修改。

然后 写一个 单例或者什么的,返回一个 全局唯一的 server 对象。server 是Retofit  通过刚刚创建的接口生成的。 还有一件事,baseUrl必须是/ 结尾,如果设置了不是以/结尾 就会提示 报错。

以上 就是全部是准备工作了。就可以开始接接口了。

在之前 定义的接口 类中,用注解  开始 写接口什么的,

post 请求 就用 @post  ,get 请求 就用@get ,

比如 

因为是接口 接收是  post请求,所以我这边用的post  的表单提交,@FormUrlEncoded 表示 是表单提交,@Field 和@FormUrlEncoded 必须是一起使用的。

由于 翻译不当,没有注意就遇到了另外一个坑,比如这样的接口:http://192.168.5.21/app/user/feed-back?token=yxae82HH87jinQ_v-uHgZAQEafuZfgXt_1525658115   需要使用post请求,但是 我的token 需要使用get 请求拼接到url 后面,然后 就脑阔痛了。

其实 只需要 使用 @Query 注解  就可以把token 拼接到url 后面了,也不需要写什么其他的,传值的时候 字需要传递 token 的 值就好了,之前 还想过 通过@path 改变url 的结果发现 我?会被转码,传递到服务器 就不是?了。应该通过path 也行,但是 要、?不被转码才可以。

然后是使用:

response.toString()  可以打印出{protocol=http/1.1, code=200, message=OK, url=http://192.168.5.21/app/user/feed-back?token=yxae82HH87jinQ_v-uHgZAQEafuZfgXt_1525658115} 类型是信息

Response.body  返回的是在接口 中对应方法的返回值。如过接口中 定义的是call<user>  那么Response.body() 返回的就是user 对象。

上一篇下一篇

猜你喜欢

热点阅读