网络加载框架Retrofit2

来源:互联网 发布:linux切换至具体目录 编辑:程序博客网 时间:2024/06/07 08:46

传送门安卓的更新换代,各种新框架,各种新的控件,当我安卓5.0的新特性还没熟悉的时候什么安卓6.0就出来了。就像网络框架,不说我们经常是原生态的http请求,还有前两年Volley框架,到如今的okhttp,retrofit。感觉现在谁网络请求不用个okhttp就有一种跟不上时代潮流。

retrofit是什么

retrofit框架的底层是基于okhttp,但是呢,它对http进行的封装、

如何使用retrofit

毫无疑问,在我们的android studio进行引入
与okhttp不同的是,retrofit需要定义一个接口

public interface RequestSerives {    @POST("{name}")    Call<String> getString(@Query("loginname") String loginname,                          @Query("nloginpwd") String nloginpwd);}

然后创建一个retrofit对象

Retrofit retrofit = new Retrofit.Builder()               .baseUrl("http://106.3.227.33/pulamsi/")               //增加返回值为String的支持               .addConverterFactory(ScalarsConverterFactory.create())               //增加返回值为Gson的支持(以实体类返回)               .addConverterFactory(GsonConverterFactory.create())               //增加返回值为Oservable<T>的支持               .addCallAdapterFactory(RxJavaCallAdapterFactory.create())               .build();

随后根据retrofit对象创建RequestSerivice对象,以及Call

RequestSerives requestSerives = retrofit.create(RequestSerives.class);//这里采用的是Java的动态代理模式Call<String> call = requestSerives.getString("userName", "1234");//传入我们请求的键值对的值

然后我们开始介绍,刚开始我们定义的接口的含义,其中post后面的name相当于一个占位符,会被baseUrl(“http://106.3.227.33/pulamsi/“),这里面的字符串所替代,至于post的意思当然是指为post请求。
@query是指的键值对,也就是下面方法进行调用的:

retrofit.create(RequestSerives.class);//这里采用的是Java的动态代理模式Call<String> call = requestSerives.getString("userName", "1234");//传

这之后我们就可以进行数据的获取,例如

 call.enqueue(new Callback<String>() {    @Override    public void onResponse(Call<String> call, Response<String> response) {        Log.e("成功",response.body().toString());    }    @Override    public void onFailure(Call<String> call, Throwable t) {        Log.e("失败","失败");    }});

还有一点需要注意的是,默认的情况下,retrofit用的是gson解析,我们的返回值可以是gson解析过的对象。

0 0
原创粉丝点击