Ritrofit+Rxjava

示例地址
//http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage

url地址

public class HttpConfig {

    public static String base_url = "http://result.eolinker.com/";
    public static String url = "umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611";
}

定义借口

public interface RetrofitService {

    @GET("umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611")
    Observable<Book> getSearchBook(@QueryMap Map<String, String> map);


}

Retrofit的工具类

public class RetrofitUtil {
    //单利模式
    private static RetrofitUtil retrofitUtil;
    private final Retrofit retrofit;

    public static RetrofitUtil getInstance() {
        if (retrofitUtil == null) {
            retrofitUtil = new RetrofitUtil();
        }
        return retrofitUtil;
    }

    //初始化Retrofit
    public RetrofitUtil() {
        retrofit = new Retrofit.Builder()
                .baseUrl(HttpConfig.base_url)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create(new Gson()))
                .build();
    }

    //指定服务
    public <T> T createRequest(Class<T> clz) {
        T t = retrofit.create(clz);
        return t;
    }
}

Modle层调用

public class ModleImpl implements IModle{
    @Override
    public void getShowData(Map<String, String> map, final ShowDataListener showDataListener) {
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        RetrofitService service = retrofitUtil.createRequest(RetrofitService.class);
        Observable<Book> observable = service.getSearchBook(map);
        observable.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Book>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                        showDataListener.getDataError(e.getMessage());
                    }

                    @Override
                    public void onNext(Book book) {
                        Book.DataBean data = book.getData();
                        showDataListener.getDataSuccess(data);
                    }
                });

    }
}



没有封装的ritrofit应用:

Rxjava就是java语言开发中用于异步操作,RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。

Gradle:
    implementation 'com.jcodecraeer:xrecyclerview:1.5.9'
    implementation 'com.squareup.retrofit2:retrofit:2.1.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

示例数据接口:

https://api.douban.com/v2/book/search?q=金瓶梅&tag=&start=0&count=1

1.定义接口,封装参数



public interface RetrofitService {

    @GET("book/search")
    Call<Book> getSearchBook(
          @Query("q") String name,
          @Query("tag") String tag,
          @Query("start") int start,
          @Query("count") int count
    );

}

2.创建 Retrofit 实例

        Retrofit retrofits = new Retrofit.Builder()
                // 设置网络请求的Url地址
                .baseUrl("https://api.douban.com/v2/")
                // 设置数据解析器
                .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().create()))
                .build();

3.创建 网络请求接口 的实例

```
 RetrofitService service = retrofits.create(RetrofitService.class);
        Call<Book> call = service.getSearchBook("金瓶梅",null,0,1);
        call.enqueue(new Callback<Book>() {
            @Override
            public void onResponse(Call<Book> call, Response<Book> response) {
            // 得到数据
               Book.DataBean data = response.body().getData();

            }

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

            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值