retrofit 使用介绍(快速了解和集成retrofit)

来源:互联网 发布:龙猫 知乎 编辑:程序博客网 时间:2024/05/22 15:28

一、简介

不废话!这里是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的使用的文章

文章01  文章02 文章03  文章04


0 0
原创粉丝点击