一需求:向服务端发一个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的网络请求变化分析