Retrofit的简单介绍使用

今天说下关于网络的东西,公司的项目的网络请求都是用okhttp搭的,前阵子在网上看到Retrofit这东西,它跟okhttp一样都是Square公司,retrofit就是对okhttp做了一层封装。我觉得它对于okhttp的区别最大的一点就是用注解的方式来设置参数请求等。所以可以说RxAndroid跟它算是绝配。今天只是简单玩了下get请求。例子有点基础,我也在探究阶段0.0     好了。接下来进入正题吧

来看下项目中build.gradle文件的配置

其实本例子rxandroid还没讲到,所以只需要导入上三个retrofit的包就ok了。需要注意的是版本需要一样。

首先看下我完整的接口,里面是json字符串。http://litchiapi.jstv.com/api/GetFeeds?column=0&PageSize=20&pageIndex=2

分类一下,首先  http://litchiapi.jstv.com/  我作为了baseUrl 。api/GetFeeds  这段我作为了get请求的url。column=0&PageSize=20&pageIndex=2  这些是请求的参数。上面的3段除了baseUrl其他都用注解的方式声明。

下面看下具体用法。首先我们先定义一个请求接口,看下代码:

/**
 * Created by Administrator on 2016/9/29.
 */
public interface  RetrofitTestInterface  {

    @GET("api/GetFeeds")
    Call<Bean> getServiceBeans(@Query("column") int column,
                               @Query("PageSize") int pageSize,
                               @Query("pageIndex") int pageIndex);
}

上面用@GET声明了get请求的地址,@Query用来声明参数,多个请求的话我们还可以包装成Map,但是注解就不是@Query了,而是@QueryMap。时间原因,本例子没讲,后续我再加上,这里需要注意的是声明的参数需跟请求的Url的参数对应。下面我们看具体用法:

public class MainActivity extends AppCompatActivity {

    private String TAG = "MainActivity";
    private String baseUrl = "http://litchiapi.jstv.com/";
    private Button mBtn;
    private Call<Bean> serviceBeans;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtn = ((Button) findViewById(R.id.btn));

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        RetrofitTestInterface retrofitTestInterface = retrofit
                .create(RetrofitTestInterface.class);

        serviceBeans = retrofitTestInterface.getServiceBeans(0, 20, 2);
        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                serviceBeans.enqueue(new Callback<Bean>() {
                    @Override
                    public void onResponse(Call<Bean> call, Response<Bean> response) {
                        Log.e(TAG, "请求成功");
                        Log.e(TAG, response.body().getParamz().getFeeds().get(0).getData().getSubject());
                    }

                    @Override
                    public void onFailure(Call<Bean> call, Throwable t) {

                    }
                });


            }
        });


    }
}
我们通过 new Retrofit.Builder 方法来构建 Retrofit 对象,然后通过
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
设置基本url,添加gson解析器,就是表示需要用什么转换器来解析返回值,GsonConverterFactory.create()表示调用Gson库来解析json返回值。最后调用build()完成。

然后我们通过retrofit对象调用

 RetrofitTestInterface retrofitTestInterface = retrofit
                .create(RetrofitTestInterface.class);
来得到我们定义好的接口对象。

通过接口调用里面的方法然后传入参数得到Call:

 serviceBeans = retrofitTestInterface.getServiceBeans(0, 20, 2);
最后我们通过call的异步得打请求得到的数据:

serviceBeans.enqueue(new Callback<Bean>() {
                    @Override
                    public void onResponse(Call<Bean> call, Response<Bean> response) {
                        Log.e(TAG, "请求成功");
                        Log.e(TAG, response.body().getParamz().getFeeds().get(0).getData().getSubject());
                    }

                    @Override
                    public void onFailure(Call<Bean> call, Throwable t) {

                    }
                });
它有同步和异步两种请求方式,同步的话是通过call.execute().body();得到请求体。需要注意的是同步需要另开线程,而异步则不用。其中onResponse方法是请求成功的回调方法,而onFailure()方法是请求失败的回调。请求成功之后我们想要的数据已经解析好变成response对象。

点击按钮之后返回数据成功:

好了,是不是很简单。今天这个例子很基础。希望大家都能看懂。后续的话有时间再添加其他方式的使用介绍,毕竟它的功能确实很强大。

共勉



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值