Android前端+Spring Boot后端 登录功能实现

1.后端比较熟悉,先说后端框架搭建

(1)创建项目,总体框架

创建项目后,自己添加包,框架如下

 

userController里的一些内容,只供参考,代码不全,无法实现

@RestController
@Slf4j
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 用户登录类
     */
    @PostMapping("/login")
    public R<User> login(@RequestBody User user, HttpSession session){
        // 查询数据库
        final LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getUserName, user.getUserName());
        final User user1 = userService.getOne(queryWrapper);
        // 没有根据账号找到数据
        if (user1 == null) {
            return R.error("账号不存在");
        }
        // 密码比对
        if (!user1.getUserPassword().equals(user.getUserPassword())) {
            return R.error("密码错误");
        }
        // 登陆成功,保存userID
        session.setAttribute("userName", user.getUserName());
        log.info("当前登录用户name:" + user.getUserName());
        
        return R.success(user1);

    }
}

(2)创建数据库

数据库是直接在社区版IDEA里连接Mysql,在控制台端创建的数据库和user表,用于数据交互。

2.Android前端

(1)前端主要框架

Activity包里是Activity Java类,主要响应layout包里activity_login.xml等页面布局内的按钮响应

(2)写登录功能

activity_login.xml里的内容,只参考界面布局代码即可,代码不可用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:gravity="bottom|center"
    android:orientation="vertical"
    tools:context=".Activity.LoginActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="122dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:gravity="bottom|center"
            android:paddingBottom="15dp"
            android:text="登录"
            android:textColor="#0E0D0B"
            android:textSize="34sp" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <EditText
            android:id="@+id/Username"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:layout_marginLeft="40dp"
            android:layout_marginTop="40dp"
            android:layout_marginRight="30dp"
            android:layout_marginBottom="20dp"
            android:ems="10"
            android:gravity="bottom|center"
            android:hint="请输入用户名"
            android:inputType="textPersonName"
            android:paddingLeft="20dp"
            android:textSize="24sp" />

        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:layout_marginLeft="40dp"
            android:layout_marginTop="25dp"
            android:layout_marginRight="30dp"
            android:layout_marginBottom="20dp"
            android:ems="10"
            android:gravity="bottom|center"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:paddingLeft="20dp"
            android:textSize="24sp"
            android:visibility="visible" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/login"
            android:layout_width="320dp"
            android:layout_height="75dp"
            android:layout_gravity="bottom|center"
            android:layout_marginTop="30dp"
            android:text="登录"
            android:textSize="24sp" />

        <Button
            android:id="@+id/register"
            android:layout_width="320dp"
            android:layout_height="75dp"
            android:layout_gravity="bottom|center"
            android:layout_marginTop="30dp"
            android:text="注册"
            android:textSize="24sp" />
    </LinearLayout>
</LinearLayout>

LoginActivity.java

public class LoginActivity extends AppCompatActivity {
    private EditText name;
    private EditText password;

    Button login,register;  //登录、注册按钮

    @Override
    protected void onCreate(Bundle savedState){
        super.onCreate(savedState);
        setContentView(R.layout.activity_login);

        name = findViewById(R.id.Username);  //获取输入的账号
        password = findViewById(R.id.password);  //获取输入的密码
        login = findViewById(R.id.login);
        register = findViewById(R.id.register);

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String url = "http://后端部署ip地址:8080/user/login";
                String username = name.getText().toString().trim();
                String userPassword = password.getText().toString().trim();

                if(username.equals("")){
                   Toast.makeText(LoginActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show();

                }else if(userPassword.equals("")){
                   Toast.makeText(LoginActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();

                }else {

                    //请求传入的参数
                    JSONObject user = new JSONObject();
                    try{
                        user.put("userName",username);
                        user.put("userPassword",userPassword);
                    }catch (JSONException e){
                        e.printStackTrace();
                    }


                    OkHttpClient httpClient = new OkHttpClient();
                    MediaType type = MediaType.parse("application/json;charset=utf-8");
                    RequestBody requestBody = RequestBody.create(type,""+ user);

                    Request getRequest = new Request.Builder()
                        .url(url)
                        .post(requestBody)
                        .build();
                    Call call = httpClient.newCall(getRequest);
                    call.enqueue(new Callback() {
                        @Override
                        public void onFailure(Call call, IOException e) {

                            Log.i(TAG, "post请求失败 \n" +
                                "*********请求体,传送数据*********** \n"+
                                requestBody.toString() + "\n"+
                                "*****user里的数据***** \n"+
                                user);
                        }

                        @Override
                        public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                            assert response.body() != null;
                            String R = response.body().string();
                            Log.i(TAG, "okHttpPost enqueue: \n " +
                                "onResponse:"+ response.toString() +"\n " +
                                "body:" +R);
                            //将resoust转换成jsonPath 格式
//                            io.restassured.path.json.JsonPath jsonPath =io.restassured.path.json.JsonPath.from(R);
                            try {
                                JSONObject toJsonObj= new JSONObject(R);
                                if(response.code()==200 && toJsonObj.get("code").equals(1)){
                                    Intent intent = new Intent();
                                    intent.setClass(LoginActivity.this, MainActivity.class);
                                    startActivity(intent);
                                }
                                else {
                                    Looper.prepare();
                                    Toast.makeText(LoginActivity.this, toJsonObj.get("code")+"****"+toJsonObj.get("msg").toString(), Toast.LENGTH_SHORT).show();
                                    Looper.loop();
                                }
                            } catch (JSONException e) {
                                throw new RuntimeException(e);
                            }

                        }
                    });

                }
            }
        });

       
    }


}

3.注意踩坑

(1)后端数据库配置

建议后端代码运行时,确认数据库是否能正常连接,不只看IDEA连接数据库,更要看application.yml配置文件里的数据库

(2)Android传数据时使用的URL

建议查看后端运行的所在网络IPV4地址,即为url请求地址。我在本机上运行的后端,但是有时候电脑联网不同,IPV4地址也不同,url会变,不一致则出现请求失败的情况。

(3)Android okhttp3网络请求框架

建议初学者仔细阅读官方文档和教程,不要在网上随意找个代码,大家的代码思路不太相同,复制别人的代码,但是又搞不懂请求流程,反而耗费时间

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你想开发一个基于uni-app、Spring Boot和socket.io的ChatGPT聊天应用吗?这是一个很有趣的项目!下面是一些简要的步骤和建议: 1. 首先,你需要了解uni-app、Spring Boot和socket.io的基础知识。uni-app是一个跨平台的开发框架,可以用于开发iOS、Android和Web应用程序。Spring Boot是一个用于快速构建基于Spring框架的应用程序的工具。socket.io是一个实时的、双向通信的库,用于在客户端和服务器之间建立WebSocket连接。 2. 接下来,你需要确定ChatGPT的实现方式。ChatGPT是基于自然语言处理的人工智能聊天机器人,需要使用GPT模型对用户输入进行处理和回复。你可以使用已经训练好的GPT模型,也可以使用开源框架如Hugging Face Transformers来构建自己的模型。 3. 然后,你需要设计和实现前端界面。你可以使用uni-app提供的UI组件和样式来构建聊天界面。你可以使用socket.io-client库来处理客户端和服务器之间的WebSocket连接,并将用户输入发送到服务器进行处理。 4. 在后端,你需要使用Spring Boot框架来处理WebSocket连接和GPT模型。你可以使用socket.io服务器库来处理WebSocket连接,并使用Hugging Face Transformers框架来构建ChatGPT模型。当服务器接收到用户输入时,它将使用ChatGPT模型进行处理并生成回复,然后将回复发送回客户端。 5. 最后,你需要进行测试和部署。你可以使用Postman或其他工具来测试API端点和WebSocket连接。你可以将应用程序部署到云服务器或Heroku等云平台上,以便用户可以随时随地访问应用程序。 希望这些建议能帮助你开始开发ChatGPT聊天应用程序!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值