Retrofit+RxJava 简单学习

RxJava优点:异步,逻辑简洁。

 //被观察者创建
       Observer<String> observer = new Observer<String>() {
           @Override
           public void onCompleted() {
           }

           @Override
           public void onError(Throwable e) {
           }

           @Override
           public void onNext(String str) {
               Log.i("被观察者回调",str);
           }
       };
//被观察者Observer抽象类的实现类
        Subscriber<String> subscriber = new Subscriber<String>() {

            @Override
            public void onStart() {
                super.onStart();
            }

            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.i("被观察者回调",s);
            }
        };

//观察者,oncreate创造基本的事件序列
        Observable observable = Observable.create(new Observable.OnSubscribe<String>() {

            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("第一次");
                subscriber.onNext("第二次");
                subscriber.onNext("第三次");
                subscriber.onCompleted();
            }
        });
        //创建事件序列
        Observable justObsevable = Observable.just("hello", "world", "!!!");

        //创建事件序列
        String[] strs = new String[]{"你好","我好","大家好"};
        Observable fromObsevable = Observable.from(strs);

        Action1 onNextAction = new Action1() {
            //onNext()
            @Override
            public void call(Object o) {

            }
        };

        Action1<Throwable> onErrorAction = new Action1<Throwable>() {
            //onEorr
            @Override
            public void call(Throwable o) {

            }
        };

        Action0 action = new Action0() {
            //comepelete()
            @Override
            public void call() {
                Log.i("comepelete","c");
            }
        };

        //订阅,多个观察者不能同时订阅一个被观察者
        observable.subscribe(subscriber);
        justObsevable.subscribe(observer);

        Observable.from(strs).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.i("匿名观察者", s);
            }
        });

//订阅,多个观察者不能同时订阅一个被观察者
        observable.subscribe(subscriber);
        justObsevable.subscribe(observer);

    //图片的显示
        Observable.create(new Observable.OnSubscribe<Drawable>() {
            @Override
            public void call(Subscriber<? super Drawable> subscriber) {
                Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
                subscriber.onNext(drawable);
                subscriber.onCompleted();
            }
        }).subscribeOn(Schedulers.io())//事件产生在子线程
                .observeOn(AndroidSchedulers.mainThread())//事件消费在主线程
                .subscribe(new Action1<Drawable>() {
                    @Override
                    public void call(Drawable drawable) {
                        //imageView.setImageDrawable(drawable);
                    }
                });

        Observable.just("http://7xi38r.com1.z0.glb.clouddn.com/@/server_anime/goodsicons/goods01.jpg").map(new Func1<String, Bitmap>() {
            @Override
            public Bitmap call(String netPath) {

                return getImageStream(netPath);
            }
        }).subscribe(new Action1<Bitmap>() {
            @Override
            public void call(Bitmap bitmap) {
                imageView.setImageBitmap(bitmap);
            }
        });
    }

    //每个两秒执行一次操作
    private void poll(){

        Observable.interval(2, 2, TimeUnit.SECONDS).subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                Log.i("value i == ", (++i) + "");
            }
        });
    }

    private void pollOnce(){
        //在两秒后执行一次
        Observable.timer(2, TimeUnit.SECONDS).subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                Log.i("value i == ", (++i) + "");
            }
        });
    }

//retrofit单独使用


public interface TaobaoIpService {

    @GET("service/getIpInfo.php")
    Call<GetIpInfoResponse> getIP(@Query("ip") String ip);

    @FormUrlEncoded
    @POST("service/getIpInfo.php")
    Call<GetIpInfoResponse> postIP(@Field("ip") String ip);
}
 public void request(){
        Retrofit retrofit = new Retrofit.Builder().baseUrl(ENDPOINT).addConverterFactory(GsonConverterFactory.create()).build();
        Call<GetIpInfoResponse> call = retrofit.create(TaobaoIpService.class).getIP("202.202.32.202");
        call.enqueue(new Callback<GetIpInfoResponse>() {
            @Override
            public void onResponse(Response<GetIpInfoResponse> response, Retrofit retrofit) {
                Log.i("数据", response.body().data.country);
            }

            @Override
            public void onFailure(Throwable t) {
                Log.i("报错", "throw");
            }
        });
    }

//retrofit 结合 RxJava使用
public interface NetService {

    @GET("service/getIpInfo.php")
    rx.Observable<GetIpInfoResponse> getIP(@Query("ip") String ip);
}

/**
     * doOnNext();在某次操作之前处理一些逻辑
     */
    public void requestRxJava(){
        Retrofit retrofit = new Retrofit.Builder().baseUrl(ENDPOINT)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create()).build();
        NetService netService = retrofit.create(NetService.class);
        rx.Observable<GetIpInfoResponse> observable = netService.getIP("202.202.32.202");

        observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).doOnNext(new Action1<GetIpInfoResponse>() {

                @Override
                public void call(GetIpInfoResponse getIpInfoResponse) {
                    mTextView.setText("哈哈");
                }
           }).subscribe(new Subscriber<GetIpInfoResponse>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(GetIpInfoResponse getIpInfoResponse) {
                mTextView2.setText(getIpInfoResponse.data.country);
            }

        });

    }



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值