手把手教你实现:Android注册登录功能,通过本地服务器保存用户账号密码到数据库

代码我放到文章最后面了

工具准备

首先你需要电脑一台:如果没有电脑将会很难办呢 -----沃兹基硕德

下载并安装以下开发工具

  • Android Studio 官网最新版 用来开发安卓App
  • IntelliJ IDEA 官网最新版 用来开发后端,处理安卓APP的请求
  • Navicat for MySql 官网最新版 数据库可视化工具,用来查看数据库和表,以及必要时手动修改表
  • Mysql 数据库 社区最新版 用来存储 APP产生的用户数据,比如用户的账户密码
  • Post Man 官网最新版 用来测试后端API的
  • JDK 20 JDK官网就是Java 开发工具包,用JAVA 20的,实际上 JAVA 1.8以上就可以,但用高版本是最佳的

关于一些注意事项

  1. IntelliJ IDEA 需要通行证才能使用,通行证要钱,而且很贵,但如果你是大学生或者开源作者,那么是免费的,但是申请过程会比较久,所以我建议去万能的某宝买通行证,八毛即可获得。
  2. Navicat for Mysql 这个也要钱,会给你14天免费试用,这个也可以万能的某宝,或者如果你单纯只是为了学习,不太在意数据库的数据持久问题,比如我就是想过一个大学的大作业,那么我觉得14天试用足够了,到期后清除一下软件本地缓存,又可以继续用。
  3. 你应该要会JAVA语言,有一点Android基础。
  4. 关于软件配置这里久不多赘述,默认你安装好了,那么开始学习吧。

数据库构建

打开 Navicat for Mysql, 新建连接, 以及新建数据库。
请记住你填写的 用户名、密码、和新建数据库的名字

后端项目构建

打开 IDEA 新建一个项目,选择 Spring Initializr.

由于博主从事工作是Android开发,对于Gradle管理依赖比较熟悉,所以选择的是 Gradle-Groovy,
如果你对Maven比较熟悉,你也可以选择Maven。
如果你不知道这是啥玩意,那你选择Gradle-Groovy。

Tips: 简单说这两种方式管理的都是项目依赖,依赖通俗讲 就是你这个项目除了使用 JAVA JDK提供的API以外,你还想用的其他第三方提供的库或者插件。


创建完后,等待IDEA初始化完成。(它主要在下载 Spring- Boot框架)

1. 配置Gradle中的依赖
在 项目结构中找到 build.gradle文件,并在dependencies闭包中 添加以下依赖代码:

// json解析库 用于解析json
implementation 'com.google.code.gson:gson:2.10.1'
// mysql数据库操作
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java:8.0.27'
// Lombok 插件 减少模版代码编写
compileOnly "org.projectlombok:lombok:1.18.20"
annotationProcessor "org.projectlombok:lombok:1.18.20"

添加完成后,需要手动同步一下依赖,在这个框框中选择 “项目名[dependencies]”, 然后点击右侧按钮。

请添加图片描述

2. 数据库连接配置
在application.properties中,添加以下代码:

spring.datasource.url=jdbc:mysql://localhost:3306/数据库名字?useSSL=false&serverTimezone=UTC
spring.datasource.username=数据库账号
spring.datasource.password=数据库密码
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.ddl-auto=update

spring.datasource.url:指定了数据库的连接URL,连接地址为“localhost:3306/数据库名”。useSSL=false 表示不使用SSL加密连接数据库,serverTimezone=UTC 表示使用UTC时区。
spring.datasource.username和spring.datasource.password分别指定了数据库的用户名和密码。
spring.jpa.database-platform 指定了Hibernate的数据库方言,这里是指定使用MySQL 8的方言。
spring.jpa.hibernate.ddl-auto=update 表示在启动应用程序时,会根据实体类的变化来更新数据库模式,如果没有表,就会创建,如果有就会更新,不会删除或修改现有的数据。

请添加图片描述
3.配置服务器启动Banner
新增一个banner.txt文件并添加一位佛祖,保证顺顺利利,亲测有效。

                                 _
                              _ooOoo_
    佛祖保佑                  o8888888oo                不要崩溃
                             88" . "88
                             (| -_- |)
                             O\  =  /O
                          ____/`---'\____
                        .'  \\|     |//  `.
                       /  \\|||  :  |||//  \
                      /  _||||| -:- |||||_  \
                      |   | \\\  -  /'| |   |
                      | \_|  `\`---'//  |_/ |
                      \  .-\__ `-. -'__/-.  /
                    ___`. .'  /--.--\  `. .'___
                 ."" '<  `.___\_<|>_/___.' _> \"".
    佛祖保佑      | | :  `- \`. ;`. _/; .'/ /  .' ; |    不要出Bug
                \  \ `-.   \_\_`. _.'_/_/  -' _.' /
  ================-.`___`-.__\ \___  /__.-'_.'_.-'================

4. 检测环境是否正常
新增一个测试Controller类,代码如下:

@Controller
public class TestController {
    @RequestMapping("/banana")
    @ResponseBody
    public String doTest() {
        return "这个我的测试请求,请求成功了!!!!";
    }
}

在这个框框中选择 “项目名Application”,然后点击右侧按钮:
请添加图片描述
这个时候,如果不出意外,你应该可以看到一个佛祖,并且没有任何抱错:

然后打开浏览器,或者Post Man, 访问网址: http://localhost:8080/banana
请添加图片描述

接下来,升级难度,将请求数据存入数据库中
本博客只告诉最基本的使用
以下内容涉及Spring 提供的一些语法,详细可以看官网文档

5. 建立表
新建一个User.java文件

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = Constants.USER_TABLE)
public class User {
    // 用户ID,唯一的
    @Id
    private Long uid;

    // 用户名字
    @Column(name="name")
    private String name;

    // 用户手机号
    @Column(name="phone_number")
    private String phoneNumber;

    // 用户密码
    @Column(name = "password")
    private String password;

    // 用户是否是黑名单
    @Column(name = "is_black")
    private int isBlack;

    // 用户是否注销了账号
    @Column(name = "is_log_off")
    private int isLogOff;
}

6. 建立 Repository 仓库层
新建一个 UserRepository接口文件,继承 JpaRepository<表类名, Long>

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // 根据用户UID查询用户 
    List<User> findByUid(Long uid);
    // 根据用户手机号查询用户
    List<User> findByPhoneNumber(String phoneNumber);
    // 获取数据库中用户实体数量
    long count();
    // 添加一位用户进数据库
    User save(User user);
}

7. 新建Service层,对数据进行预处理
新建一个 UserService.java文件

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public List<User> getUsersByUid(Long uid) {
        return userRepository.findByUid(uid);
    }

    public List<User> getUserByPhoneNumber(String phoneNumber) {
        return userRepository.findByPhoneNumber(phoneNumber);
    }

    public long countUser() {
        return userRepository.count();
    }

    public User addUser(User user) {
        return userRepository.save(user);
    }
}

8.最后一层,Controller,和上面TestController类似
新建一个RegisterController.java, 在这里定义用户Call 注册API时的处理逻辑

@Controller
public class RegisterController {
    @Autowired
    UserService service;

    @RequestMapping("/register")
    @ResponseBody
    public String doRegister(@RequestBody String body) {
        // 核验用户上传参数数据是否正确
        BaseRequest<RegisterMessage> baseRequest =
                CheckRequestBodyUtil.instance().checkJsonStr(body, new TypeToken<RegisterMessage>() {}.getType());
        if (baseRequest.isOk()) {
            // 参数核验正确,判断是否已经注册过这个手机号
            List<User> userList = service.getUserByPhoneNumber(baseRequest.getData().getPhoneNumber());
            if (userList != null && userList.size() > 0) {
                // 已经注册过了
                return ErrorResponseUtil.instance().initResponse(Constants.PHONE_NUMBER_USED);
            } else {
                // 没有注册过,那么生成UID,并将用户信息插入数据库的 user_message表中
                long count = service.countUser();
                User user = new User(
                        UidUtil.instance().provide(count),
                        baseRequest.getData().getName(),
                        baseRequest.getData().getPhoneNumber(),
                        baseRequest.getData().getPassword(),
                        0,
                        0
                );
                User useResult = service.addUser(user);
                if (useResult != null) {
                    // 新增用户成功了
                    return SuccessResponseUtil.instance().simpleResponse();
                } else {
                    // 新增用户失败了
                    return ErrorResponseUtil.instance().initResponse(null);
                }
            }
        } else {
            // 参数核验失败
            return ErrorResponseUtil.instance().initResponse(Constants.PARAM_ERROR);
        }
    }
}

9. 用PostMan模拟 客户端发出的注册请求

在Post Man中,输入 http://localhost:8080/register, 然后请求方式改为 Post, 最后填写Body数据,点击Send.

请添加图片描述

然后我们打开 Navicat for Mysql, 找到对应的表中发现已经有数据了,这说明API是可以跑通的,后端工作已经完成了。
请添加图片描述

注意:

  1. 上面的代码中,表、Repository、Service、Controller是告诉你它是怎么跑起来的,你将代码粘贴上你的项目,肯定有很多爆红的地方,提示你一些类找不到,剩余其他一些工具类文件请访问GitHub获取。
  2. 如果请求API结果显示为图中,那么你已经成功90%了。

Android项目构建

如果你有Android基础,其实这个项目可以忽略,因为Android本身就是去Call这个API拿数据,只要API跑通,在哪个平台请求都是可以拿到数据的,比如:IOS,Web, Android,Windows应用,OS应用等。

1. 项目构建

2. 配置网络权限
在 AndroidManifest.xml 文件中添加网络权限代码:
请添加图片描述

<!--添加网络请求-->
<uses-permission android:name="android.permission.INTERNET" />

3. 配置第三方库依赖
我们需要以下依赖:
Retrofit :用于http协议/https协议的网络请求
Gson: 用于json数据解析
Rxjava: 用于异步操作
在app目录下的 build.gradle文件下添加以下依赖,然后点击右上角的 “Sync Now”,下载并同步远程依赖。

// Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
// Rxjava
implementation "io.reactivex.rxjava3:rxjava:3.1.6"
// Gson
implementation 'com.google.code.gson:gson:2.10.1'

剩余代码请从GitHub克隆下项目进行查阅
效果图如下:

Github链接

后端JAVA项目 IntelliJ IDEA: 链接
Android项目 : 链接

如果你Android APP注册时,总提示网络故障,说明你访问的本地IP域名不对,解决原理是 让手机和电脑处于同一局域网下:
一种方式是: 手机开热点,让电脑连接热点,查看电脑IP地址,并将其填入Android APP中 访问API的域名。
另外一种是: 电脑用虚拟机模拟器运行 Android项目,并将“http://localhost:8080”作为Android APP访问API的域名。

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习IEC 104协议和编程实现九号遥控功能是一项复杂的任务。本文将以300字的篇幅简要概述该过程。 首先,IEC 104协议是电力自动化系统中常用的通信协议之一,用于远程监控和控制通信。要学习IEC 104协议,首先需要了解其基本原理和通信过程。可以通过阅读相关技术文档、书籍和在线程来深入了解IEC 104协议的细节。 接下来,学习IEC 104协议的编程实现需要有一定的编程基础。主要编程语言可以选择C、C++或者其他常用的编程语言。编程实现九号遥控功能需要掌握IEC 104协议的编码和解码过程,了解相应的数据结构和流程控制。 在编程实现九号遥控功能时,首先需要建立与远程终端设备的连接。可以利用TCP/IP协议进行通信,建立socket连接。在连接建立后,必须正确配置IEC 104协议的站地址、传输参数等信息。 然后,需要编写代码实现IEC 104协议的编码和解码过程。首先,将要发送的遥控命令封装成IEC 104规定的格式,即APCI(Application Protocol Control Information)+ASDU(Application Service Data Unit)+ASDU信息组。然后,根据协议规定的解码方式,对接收到的遥控命令进行解码。 最后,根据九号遥控功能的具体需求,编写代码处理相应的逻辑。例如,判断遥控命令的类型,执行相应的操作,并及时响应给远程终端设备。 总结而言,学习IEC 104协议和编程实现九号遥控功能是一项需要专业知识和编程技能的任务。需要深入学习和实践才能掌握。希望以上简要概述可以为您提供一些指导。如需深入了解,请参考相关专业文献和指导资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值