RxJava 2+Retrofit簡単なログインを実現
5989 ワード
本文
導入依存
app.gradleに依存を追加して同期する
エンティティークラスの生成
GsonFormatプラグインを使用してJson文字列を直接エンティティークラスに生成
ユーザーログインサービス
初期化
リクエストの開始
RxJava 2への参加
依存関係の導入
サービスコードの変更
CallをFlowableに変換
RxJava対応
RxJavaコンバータへの加入
リクエストの開始
ソースコードの問題については、ステップの進化が完了していない場合、tagが作成され、各記事はtagに対応します.ソースv 0.01:https://github.com/aohanyao/Android-development-framework-evolution/releases/tag/v0.01
導入依存
app.gradleに依存を追加して同期する
implementation 'com.squareup.retrofit2:retrofit:2.4.0'//retrofit
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'//gson , Json
エンティティークラスの生成
GsonFormatプラグインを使用してJson文字列を直接エンティティークラスに生成
{
"code": 200,
"message": " ",
"data": {
"userName": "aohanyao",
"nickName": " ",
"header": "",
"age": 20,
"sex": 1,
"phone": "13813801380",
"email": "[email protected]"
}
}
ユーザーログインサービス
@GET("app_login.json")
Call login(@Path("account") String account,
@Path("password") String password);
初期化
private void initRetrofit() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://olrt5mymy.bkt.clouddn.com/")// url
// , Json
.addConverterFactory(GsonConverterFactory.create())
.build();
mUserService = retrofit.create(UserService.class);
}
リクエストの開始
private void initEvent() {
//
final EditText etAccount = findViewById(R.id.et_account);
//
final EditText etPassword = findViewById(R.id.et_pass);
//
findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//
String account = etAccount.getText().toString();
//
String password = etPassword.getText().toString();
//
mUserService.login(account, password)
//
.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
//
Log.e(TAG, "onResponse: " + response.body());
//
//LoginDto{code=200, message=' ',
// data=UserInfo{userName='aohanyao',
// nickName=' ', header='', age=20,
// sex=1, phone='13813801380',
// email='[email protected]'}}
}
@Override
public void onFailure(Call call, Throwable t) {
}
});
}
});
}
RxJava 2への参加
依存関係の導入
// RxJava
implementation 'io.reactivex.rxjava2:rxjava:2.1.5'
// RxAndroid
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
// adapter
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
サービスコードの変更
CallをFlowableに変換
public interface UserService {
@GET("app_login.json")
Flowable login(@Query("account") String account,
@Query("password") String password);
}
RxJava対応
RxJavaコンバータへの加入
private void initRetrofit() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://olrt5mymy.bkt.clouddn.com/")// url
// , Json
.addConverterFactory(GsonConverterFactory.create())
// RxJava
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
mUserService = retrofit.create(UserService.class);
}
リクエストの開始
//
findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() {
@SuppressLint("CheckResult")
@Override
public void onClick(View v) {
//
String account = etAccount.getText().toString();
//
String password = etPassword.getText().toString();
//
mUserService.login(account, password)
.subscribeOn(Schedulers.io())// io
.observeOn(AndroidSchedulers.mainThread())//
.subscribeWith(new ResourceSubscriber() {
@Override
public void onNext(LoginDto loginDto) {
//
Log.e(TAG, "onNext: " + loginDto);
}
@Override
public void onError(Throwable t) {
t.printStackTrace();
Log.e(TAG, "onError: ");
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: ");
}
});
}
});
ソースコードの問題については、ステップの進化が完了していない場合、tagが作成され、各記事はtagに対応します.ソースv 0.01:https://github.com/aohanyao/Android-development-framework-evolution/releases/tag/v0.01