Android 使用MVP Rxjava2+Retrofit2+Dagger2写的一个登录注册(含后台+数据库)的demo

时间:2020-12-10 17:46:55

Android 使用MVP Rxjava2+Retrofit2+Dagger2写的一个登录的demo

由于这是本人第一次写博客,所以有很多的不足希望大家能指正。

这个demo是客户端加服务端组成,数据库用的是mysql。

客户端

使用rxjava2+retrofit2+dagger2+mvp写的

  • rxjava2: 一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库(说到根上,它就是一个实现异步操作的库)
  • retrofit2: 类型安全的网络库,封装了okhttp
  • dagger2: Dagger2是Dagger1的分支,由谷歌公司接手开发,目前的版本是2.0

这里我就不多作介绍,如果大家有不了解的地方可以自己去百度看一看,dagger可以看这里,因为我自己也不是很懂,等我自己弄懂了,可以来写一篇这方面的博客

api接口

/**
* Created by long on 17-4-5.
* API接口
*/


public interface IBaseApi {

/**
* 用户注册
* eg:http://localhost:8080/web/Register
* @param user 用户名
* @param pass 密码
* @return
*/

@Headers(CACHE_CONTROL_NETWORK)
@POST("Register")
Observable<BaseInfo> register(@Query("user") String user, @Query("pass") String pass);

/**
* 用户登录
* eg:http://localhost:8080/web/Login
* @param user 用户名
* @param pass 密码
* @return
*/

@Headers(CACHE_CONTROL_NETWORK)
@POST("Login")
Observable<BaseInfo> login(@Query("user") String user, @Query("pass") String pass);

/**
* 获取手机短信验证码
* eg:http://localhost:8080/web/GetCheckCode
* @param phone 手机号
* @return
*/

@Headers(CACHE_CONTROL_NETWORK)
@POST("GetCheckCode")
Observable<BaseInfo> getCheckCode(@Query("phone") String phone);

/**
* 验证用户输入的验证码是否正确
* eg:http://localhost:8080/web/VerifyCheckCode
* @param checkCode
* @return
*/

@Headers(CACHE_CONTROL_NETWORK)
@POST("VerifyCheckCode")
Observable<BaseInfo> verifyCheckCode(@Query("code") String checkCode);
}

这里面注释已经写的很详细了,我就不多作解释了。

初始化网络通信服务

然后使用rxjava2和retrofit2初始化api接口,这里我只贴其中的重点,其余的大家可以看详细代码

    /**
* 初始化网络通信服务
*/

public static void init() {
// 指定缓存路径,缓存大小100Mb
Cache cache = new Cache(new File(App.app.getCacheDir(), "HttpCache"),
1024 * 1024 * 100);
OkHttpClient okHttpClient = new OkHttpClient.Builder().cache(cache)
.retryOnConnectionFailure(true)
.addInterceptor(sLoggingInterceptor)
.addInterceptor(sRewriteCacheControlInterceptor)
.addNetworkInterceptor(sRewriteCacheControlInterceptor)
.connectTimeout(10, TimeUnit.SECONDS)
.build();

Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASEURL)
.build();

baseApi = retrofit.create(IBaseApi.class);
}

其余的我就不多说了,我贴几张图吧。

Android 使用MVP Rxjava2+Retrofit2+Dagger2写的一个登录注册(含后台+数据库)的demo

Android 使用MVP Rxjava2+Retrofit2+Dagger2写的一个登录注册(含后台+数据库)的demo

这个UI是我仿照的bilibili的UI。如果有侵犯到什么,请联系我修改。

服务端

服务端我是用java ee写的
功能:完成了一个最基本的登录和注册流程

数据库相关介绍

  • 数据库名为Login,表名为user,3个字段,user_id,user_name,user_pwd。user_id为主键。当然你也可不按照我的方式建立数据库,但是你得修改服务端里面的代码。
  • 集成环境: linux下的tomcat服务器
  • 数据传输类型:json

里面的代码我就不都贴了,我就贴一个发送手机验证码的代码吧。

public class DaYuService {

public static boolean requestSmsCode(String phone) {
Gson gson = new Gson();
boolean flag = false;
// 服务url
String url = "http://gw.api.taobao.com/router/rest";
// appkey
String appkey = "23567754";
// secret
String secret = "d02bd556928889a88b811aa28a9ec5c7";
// 生成随机的6位数字
String code = RandomUtil.createRandomVcode();
TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
AlibabaAliqinFcSmsNumSendRequest req = new AlibabaAliqinFcSmsNumSendRequest();
req.setExtend("1");
req.setSmsType("normal");
req.setSmsFreeSignName("爱生活爱龙哥");
req.setSmsParamString("{number:'" + code + " '}");
req.setRecNum(phone);
req.setSmsTemplateCode("SMS_60130168");
AlibabaAliqinFcSmsNumSendResponse rsp = null;
try {
rsp = client.execute(req);
UserSms userSms = UserSms.getInstance();
userSms.setPhone(phone);
userSms.setCode(code);
userSms.setTime(new Date());
Root root = gson.fromJson(rsp.getBody(), Root.class);
flag = root.getAlibaba_aliqin_fc_sms_num_send_response().getResult().getSuccess();
System.out.println(rsp.getBody());
} catch (ApiException e) {
e.printStackTrace();
}
if (flag) {
return true;
} else {
return false;
}
}

}

这个类是我通过阿里大鱼的平台给手机发送验证码,是可以直接向手机发送验证码的。当然如果大家有需要,可以去阿里大于上面自己注册一个账号捣鼓捣鼓,有任何问题都可以和我交流。

由于这是我第一次写博客,所以还有很多的不足,另外有什么不明白的,可以和我交流,我一般时间都在。

我的QQ:849343227

代码下载

注意:客户端项目中的mvp module才是使用了dagger2的
客户端源代码地址:https://github.com/chen849343227/login
服务端源代码下载地址:https://github.com/chen849343227/login_javaee