Retrofit2+Rxjava2实践

一需求:向服务端发一个get请求,服务端返回gson字符串,客户端自动解析成需要的数据类型。
{“keyxx”:xxx,“token”:“xxxxxx”}=>class TokenResponse{ String token; }
二意图
用一个最简单的例子说明框架都给我们做了什么,简单来说,就想调本地的异步接口一样,那么框架都为我们在做说明什么呢?
1.把我们的接口编程http请求。
2.将请求的处理变成一个回调处理。
3.将返回的内容自动转换成我们需要的数据。
三代码
服务接口

package com.example.retrofit_rxjava;

import io.reactivex.Observable;
import retrofit2.http.GET;

public interface HttpNetApi {
    @GET("xxx/xxxxx")
    Observable getToken();
}

数据实体类

package com.example.retrofit_rxjava;

public class TokenResponse {
    private String token = "";
    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}

Activity

    TextView mTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView = findViewById(R.id.id_textview);
        test3();
    }

服务请求+回调处理+数据解析

public void test3(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://地址:端口/")
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        HttpNetApi api = retrofit.create(HttpNetApi.class);

        api.getToken()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer() {
                    private Disposable mDisposable;

                    @Override
                    public void onSubscribe(Disposable d) {
                        mDisposable = d;
                    }

                    @Override
                    public void onNext(TokenResponse value) {
                        mTextView.setText(value.getToken());
                        mDisposable.dispose();//注销
                    }

                    @Override
                    public void onError(Throwable e) {
                        mTextView.setText(e.toString());
                        mDisposable.dispose();//注销
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

xml




    


服务端的发送过来的源文件

{"keyxx":xxx,"token":"xxxxxx"}

四 运行效果
Retrofit2+Rxjava2实践_第1张图片
五 关系分析
Retrofit2+Rxjava2实践_第2张图片
六 由okhttp=>Retrofit2+Rxjava2的网络请求变化分析
Retrofit2+Rxjava2实践_第3张图片

你可能感兴趣的:(Retrofit2+Rxjava2实践)