一、简介
不废话!这里是retrofitGithub地址 这里是retrofit的官方文档 。单独学会使用retrofit 只需要进入github地址将最新的依赖包导入就可以使用 这里最新的是 jar包版本是 compile 'com.squareup.retrofit2:retrofit:2.2.0' 导入项目即可使用(retrfit包中已经自带了okhttp3的东西)。 然后只需要 定义跟地址 编写请求的接口 进行调用 三个步骤就可以使用retrofit了。
代码如下:
1.0 定义请求跟地址
public class Constant {
public static String BaseURL = "http://litchiapi.jstv.com/";
}
2.0 定义请求接口(接口名字自己随意)
public interface Netinterface {
@GET("api/GetFeeds?column=0&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41")
Call<LizhiNews> test01();
}
3.0 进行调用就可以实现请求了
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_retrfit);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constant.BaseURL)
.build();
Netinterface netinterface = retrofit.create(Netinterface.class);
netinterface.test01().enqueue(new Callback<LizhiNews>() {
@Override
public void onResponse(Call<LizhiNews> call, Response<LizhiNews> response) {
LizhiNews body = response.body();
Log.e(TAG, body.toString());
}
@Override
public void onFailure(Call<LizhiNews> call, Throwable t) {
}
});
}
以上三步就可以实现retrofit的一个基本配置使用了。当然retrfit的使用绝对不仅仅局限于此
二、配合Gson 、rxjava等使用
为了配合Gson快速解析为java对象 要使用Gson进行解析 那就必须要导入Gson的依赖 studio里面自带有 就不在赘述了。 这里要说的是retrfit为了能够使用Gson解析还要添加一个Converters(转换器的依赖 、使用rxjava也是导入rxjava的依赖包 还要导入rxjava的转换器的依赖包) 最新的gson和rxjava等的converter是的包可以从Github项目中的一个叫做retrofit-converters中查找到 导入就可以就行使用了 。
然后剩下的就是根据项目需要去进行各种get post put 等等请求(建议不需要去过于苛刻的去记这些注解等等 只需要使用的时候查看文档就行)
这里借用一下 这是博主的原地址 这篇博客的案例(因为其确实讲解的很清晰)
/**
* 通过@GET注解标记位get请求 @GET中填写baseUrl根路径后的路径
* 访问的网络地址由根路径和@GET注解后的路径连接组成
*/
//案例一:这种是将根路径后面的路径整个放入了get中进行拼接,相对比较简单,后期和根url拼接
@GET("api/GetFeeds?column=0&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41")
//此处的返回值可以自行设置,这里我就简单的让他返回请求体的内容:
Call<ResponseBody> getResonseBody();
@GET("api/GetFeeds?column=0&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41")
//案例二:此处的返回值我让他返回的是String类型,具体返回逻辑我一会儿在主方法中创建:
Call<String> getJsonString();
//案例三:使用的是茶叶品牌的url,此处将根目录以后的部分进行了截取,但是返回的是一个Tea对象的集合,至于tea对象的生成大家一定都会使用Gson吧,这个我就不细说了。
@GET("category?app_id=161")
Call<List<Tea>> getTeas();
//案例四:此处使用的是同案例一,但是path路径不确定的情况情况下,使用{type}代替,当做抽象方法中的一个参数进行接收,
@GET("api/{type}?column=0&PageSize=20&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41")
//这里的path就是你要传入的type类型,这里@path“tyle”名称一定要和@get();中的type同名,
Call<NewsInfo> getNewsInfo(@Path("type") String type);//String type="GetFeeds"
//案例五:有一个键值对的情况,如果不确定时,需要使用此方法,使用@query(键名)将你的值输入:
@GET("category")//category?app_id=161
Call<List<Tea>> getTeaByNetWork(@Query("app_id") int id);
//案例六:如果键值对是很多的情况下,案例五很明先无法满足需要,这时候需要使用@querymap接收一个map集合来进行拼凑。
@GET("api/GetFeeds")
Call<NewsInfo> getInfoByNetWork(@QueryMap Map<String, String> map);
//你也可以使用多种方式拼凑结合:使用{},加上参数的拼接等,都是可以灵活运行
案例七:
// @GET("api/{type}")
// Call<NewsInfo> getInfo(@Path("type") String type,@QueryMap Map<String,String> map);
//案例八:网络下载图片,
@GET("img")
Call<ResponseBody> downLoadImage();
//post形式提交表单数据 登录 注册,post需要服务器,这里无法进行演示,但是代码有,需要的话可以从自己的服务器中进行验证,
//@post注解说明采用post提交的形式 @Field("向服务器提交的key")
@POST("LoginServlet")
@FormUrlEncoded
Call<String> login(@Field("username") String userName,
@Field("password") String password);
//上传单个文件 @Field和@Part 客户端向服务端携带参数发起请求
//@Part 可携带的参数类型更多样 数据流等
@Multipart
@POST("UpLoadAction")
Call<ResponseBody> upLoadFile(@Part("img") RequestBody body);
//可以上传表单中所有的数据 表单文本+附件
@POST("UpLoadAction")
Call<ResponseBody> upLoad(@Body() MultipartBody body);
compile 'com.squareup.okhttp3:logging-interceptor:3.1.2'
最后附上 几篇可供参考的retrofit的使用的文章