rxJava 2.0介绍

Retrofit单独使用示例
1,首先添加依赖和权限

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
<uses-permission android:name="android.permission.INTERNET" />

2,根据接口url返回的数据定义对应的实体类
例如接口 http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello world 对应的json格式的数据如下:
在这里插入图片描述
定义的实体类Translation.java如下:

public class Translation {
        private int status;

    private content content;
    private static class content {
        private String from;
        private String to;
        private String vendor;
        private String out;
        private int errNo;
    }

    //定义 输出返回数据 的方法
    public void show() {
        System.out.println(status);

        System.out.println(content.from);
        System.out.println(content.to);
        System.out.println(content.vendor);
        System.out.println(content.out);
        System.out.println(content.errNo);
    }
}

3,创建用于描述网络请求的接口

public interface GetRequest_Interface {

    @GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
    Call< Translation > getCall();
    
}

4,创建retrofit对象
5,获取call实例
6,发送网络请求,处理返回的数据

public void request() {

        //步骤4:创建Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://fy.iciba.com/") // 设置 网络请求 Url
                .addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
                .build();

        // 步骤5:获取Call实例
        Call<Translation> call = retrofit.create(GetRequest_Interface.class).getCall();

        //步骤6:发送网络请求(异步)
        call.enqueue(new Callback<Translation>() {
            //请求成功时回调
            @Override
            public void onResponse(Call<Translation> call, Response<Translation> response) {
                // 步骤7:处理返回的数据结果
                response.body().show();
            }

            //请求失败时回调
            @Override
            public void onFailure(Call<Translation> call, Throwable throwable) {
                System.out.println("连接失败");
            }
        });
    }

retrofit + rxjava

1.因为要结合使用RxJava,所以返回值就不在是一个Call了,而是一个Observable:

public interface GetRequest_Interface {
    
        @GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
        Observable< Translation > getCall();
        
    }

2,创建retrofit实例时,配置关联rxJava2:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://fy.iciba.com/") // 设置 网络请求 Url
                .addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

3,步骤5返回的不再是call实例,而是RxJava里面的被观察者Observable实例:

Observable<Translation> observable= retrofit.create(GetRequest_Interface.class).getCall();

4,获取到了Observable的实例,接下来就是rxJava的语法了,如下:

observable.subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<Translation>() {
            @Override
            public void onSubscribe(Disposable d) {
            }

            @Override
            public void onNext(Translation translation) {
                
                // 成功获取到gson转换后的对象translation
                
            }

            @Override
            public void onError(Throwable e) {
                Log.v("zyl", "请求失败:"+e.getMessage());
            }

            @Override
            public void onComplete() {

            }
        });

猜你喜欢

转载自blog.csdn.net/gpf1320253667/article/details/83714078
今日推荐