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<TokenResponse> 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<TokenResponse>() {
                    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

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/id_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

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

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

四 运行效果
运行效果
五 关系分析
在这里插入图片描述
六 由okhttp=>Retrofit2+Rxjava2的网络请求变化分析
由okhttp=>Retrofit2+Rxjava2的网络请求变化分析

猜你喜欢

转载自blog.csdn.net/xie__jin__cheng/article/details/92646556
今日推荐