Giter Site home page Giter Site logo

retrofit2_rxjava2's Introduction

retrofit2_rxjava2

retrofit2+rxjava2封装的网络请求框架

retrofit2_rxjava2's People

Contributors

axechen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

retrofit2_rxjava2's Issues

提问

我参考你的demo完成了封装,效果都实现了,但是有一个地方不同,就是你可以直接得到实体类对象,但是我的返回是一个Object 还需要自己强转,每次都写,感觉不太好,请问你知道什么原因吗。
RetrofitManager.getIMGoldBird().getMineNoLoginRecommendGoods(map)
.compose(this.<Response>bindToLifecycle())//管理Retrofit的生命周期 当页面被销毁时取消网络请求 防止内存泄露
.compose(ResponseTransformer.handleResult())
.compose(schedulerProvider.applySchedulers())
.subscribeOn(Schedulers.io())
.doOnSubscribe(new Consumer() {
@OverRide
public void accept(@nonnull Disposable disposable) throws Exception {
//此方法是在事件发起之前做的准备工作 例:网络请求发起的ProgressBar转圈
}
})
.subscribeOn(AndroidSchedulers.mainThread())//指定主线程
.observeOn(Schedulers.io())
.doOnNext(new Consumer() {
@OverRide
public void accept(@nonnull Object o) throws Exception {
//doOnNext:数据输出准备 一般用于网络获取数据后缓存到数据库 因为数据库操作是耗时操作所以需要在子线程进行
GoodsBean gb= (GoodsBean) o;
cacheDoubleUtils.put("sp",gb);//缓存
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@OverRide
public void onSubscribe(Disposable disposable) {

                    }

                    @Override
                    public void onNext(Object obj) {
                        GoodsBean goodsBean= (GoodsBean) obj;
                        if (goodsBean!=null){
                            if (data.size()>0){
                                data.clear();
                            }
                            data.addAll(goodsBean.getRows());
                            adapter.notifyDataSetChanged();
                        }
                    }

                    @Override
                    public void onError(Throwable throwable) {
                        ApiException apiException= (ApiException) throwable;
                        ToastUtils.showLong("onError: "+"加载失败了"+apiException.getCode()+apiException.getDisplayMessage());
                    }

                    @Override
                    public void onComplete() {

                    }
                });

提问

在ResponseTransformer类里面,onErrorResumeNext需要强转,在flatMap(new ResponseFunction<>()显示类型不匹配,这个是什么造成的

我尝试完全模仿你的demo来,发现还是会出这样的问题
只有Object才不会报错 如果是用T对应的实体类对象就会报错
public class Presenter {

private Model model;

private Contract.View view;

private BaseSchedulerProvider schedulerProvider;

private CompositeDisposable mDisposable;

public Presenter(Model model,
                 Contract.View view,
                 BaseSchedulerProvider schedulerProvider) {
    this.model = model;
    this.view = view;
    this.schedulerProvider = schedulerProvider;
    mDisposable = new CompositeDisposable();

}

public void despose(){
    mDisposable.dispose();
}

public void getList() {
    Map<String,String> map=new HashMap<>();
    map.put("current_page",1+"");
    map.put("list_rows","10");
    Disposable disposable = model.getGoodsList(map)
            .compose(ResponseTransformer.<GoodsBean>handleResult())
            .compose(schedulerProvider.applySchedulers())
            .subscribe(new Consumer<Object>() {
                           @Override
                           public void accept(Object carBeans) throws Exception {
                               // 处理数据 直接获取到

                           }
                       }, new Consumer<Throwable>() {
                           @Override
                           public void accept(Throwable throwable) throws Exception {
                               // 处理异常
                           }
                       }

            );

    mDisposable.add(disposable);
}

}

3 有用到的

OkHttpClient.Builder builder=new OkHttpClient.Builder();
builder.connectTimeout(15, TimeUnit.SECONDS);//设置网络连接超时时间
builder.readTimeout(15, TimeUnit.SECONDS);//设置数据读取超时时间
builder.writeTimeout(15, TimeUnit.SECONDS);//设置数据写入超时时间

    OkHttpClient client=builder.build();

    retrofit = new Retrofit.Builder()
            .client(client)
            .baseUrl(APIManage.BASE_URL)
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//使用Rxjava的Observable方式必须添加此项  使用Retrofit默认Call形式则不需要
            .addConverterFactory(GsonConverterFactory.create())//将服务器返回的json数据转换为实体类对象
            .build();

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.