RxJava 2+Retrofit簡単なログインを実現

5989 ワード

本文
導入依存
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