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

来源:互联网 发布:win10怎么连接usb网络 编辑:程序博客网 时间:2024/05/17 23:51

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);    }

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

这是登录的主界面

注册界面

这个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

2 0
原创粉丝点击