ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

RxJava2+Retrofit实现简单登陆

2019-03-28 16:51:53  阅读:343  来源: 互联网

标签:account String void RxJava2 public 登陆 login password Retrofit


正文

引入依赖

在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": "aohanyao@gmail.com"

    }

}
用户登录服务
@GET("app_login.json")

Call<LoginDto> login(@Path("account") String account,

                    @Path("password") String password);
初始化Retrofit
  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<LoginDto>() {

                            @Override

                            public void onResponse(Call<LoginDto> call, Response<LoginDto> response) {

                                //打印登录信息

                                Log.e(TAG, "onResponse: " + response.body());

                                //结果

                                //LoginDto{code=200, message='登录成功',

                                // data=UserInfo{userName='aohanyao',

                                // nickName='禁言', header='', age=20,

                                // sex=1, phone='13813801380',

                                // email='aohanyao@gmail.com'}}

                            }

                            @Override

                            public void onFailure(Call<LoginDto> call, Throwable t) {

                            }

                        });

            }

        });

    }
加入RxJava2
引入相关依赖
// 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'
更改service代码

将Call转换为Flowable

public interface UserService {

    @GET("app_login.json")

    Flowable<LoginDto> 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<LoginDto>() {


                            @Override

                            public void onNext(LoginDto loginDto) {

                                //结果回调

                                Log.e(TAG, "onNext: " + loginDto);

                            }

                            @Override

                            public void one rror(Throwable t) {

                                t.printStackTrace();

                                Log.e(TAG, "onError: ");

                            }

                            @Override

                            public void onComplete() {

                                Log.e(TAG, "onComplete: ");

                            }

                        });

            }

        });

关于源码问题,没完成一个步骤的演进,都会创建一个tag来标记,每一篇文章对应一个tag。
源码v0.01:https://github.com/aohanyao/Android-development-framework-evolution/releases/tag/v0.01

标签:account,String,void,RxJava2,public,登陆,login,password,Retrofit
来源: https://blog.csdn.net/m0_38048084/article/details/88872005

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有