团队项目-android端

今天将团队项目的android端的登录注册功能写出,并将主页面写了出来。但是遇到了前后端连不上的问题
登录:

package com.example.faceapp.ui.login;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.example.faceapp.R;
import com.example.faceapp.api.ApiClient;
import com.example.faceapp.api.ApiService;
import com.example.faceapp.model.User;
import com.example.faceapp.ui.main.MainActivity;
import com.google.gson.Gson;

import java.io.IOException;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class LoginActivity extends AppCompatActivity {
    private EditText etUsername, etPassword;
    private Button btnLogin;

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

        etUsername = findViewById(R.id.et_username);
        etPassword = findViewById(R.id.et_password);
        btnLogin = findViewById(R.id.btn_login);

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = etUsername.getText().toString();
                String password = etPassword.getText().toString();

                User user = new User(username, password);
                ApiService apiService = ApiClient.getClient().create(ApiService.class);
                Call<User> call = apiService.login(user);
                call.enqueue(new Callback<User>() {
                    @Override
                    public void onResponse(Call<User> call, Response<User> response) {
                        if (response.isSuccessful()) {
                            Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();

                            // 保存用户信息到 SharedPreferences
                            SharedPreferences sharedPreferences=getSharedPreferences("user_info", MODE_PRIVATE);
                            SharedPreferences.Editor editor = sharedPreferences.edit();
                            Gson gson = new Gson();
                            String userJson = gson.toJson(response.body());
                            editor.putString("user", userJson);
                            editor.apply();

                            startActivity(new Intent(LoginActivity.this, MainActivity.class));
                            finish();
                        } else {
                            Toast.makeText(LoginActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onFailure(Call<User> call, Throwable t) {
                        Toast.makeText(LoginActivity.this,"网络错误"+t.getMessage(), Toast.LENGTH_SHORT).show();
                        t.printStackTrace();
                    }

                });
            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:background="#f5f7fa">

    <!-- 标题 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:text="登录"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"/>

    <!-- 用户名输入框 -->
    <EditText
        android:id="@+id/et_username"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:hint="用户名"
        android:padding="10dp"
        android:layout_marginBottom="15dp"
        android:background="@android:color/white"
        android:elevation="4dp"/>

    <!-- 密码输入框 -->
    <EditText
        android:id="@+id/et_password"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:hint="密码"
        android:padding="10dp"
        android:layout_marginBottom="15dp"
        android:background="@android:color/white"
        android:elevation="4dp"
        android:inputType="textPassword"/>

    <!-- 登录按钮 -->
    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:text="登录"
        android:background="#4299e1"
        android:padding="10dp"
        android:textColor="#3E2723"
        android:textSize="16sp" />
</LinearLayout>

注册:

package com.example.faceapp.ui.register;

import static androidx.core.content.ContextCompat.startActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.example.faceapp.R;
import com.example.faceapp.api.ApiClient;
import com.example.faceapp.api.ApiService;
import com.example.faceapp.model.User;
import com.example.faceapp.ui.login.LoginActivity;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class RegisterActivity extends AppCompatActivity {
    private EditText etUsername, etPassword;
    private Button btnRegister;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        etUsername = findViewById(R.id.et_username);
        etPassword = findViewById(R.id.et_password);
        btnRegister = findViewById(R.id.btn_register);

        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = etUsername.getText().toString();
                String password = etPassword.getText().toString();

                User user = new User(username, password);
                ApiService apiService = ApiClient.getClient().create(ApiService.class);
                Call<User> call = apiService.register(user);
                call.enqueue(new Callback<User>() {
                    @Override
                    public void onResponse(Call<User> call, Response<User> response) {
                        if (response.isSuccessful()) {
                            Toast.makeText(RegisterActivity.this, "注册成功!您的ID: " + response.body().getId(), Toast.LENGTH_SHORT).show();
                            // 跳转到登录界面
                            startActivity(new Intent(RegisterActivity.this, LoginActivity.class));
                            finish();
                        } else {
                            Toast.makeText(RegisterActivity.this, "注册失败", Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onFailure(Call<User> call, Throwable t) {
                        Toast.makeText(RegisterActivity.this, "网络错误", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:background="#f5f7fa">

    <!-- 标题 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:text="注册"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"/>

    <!-- 用户名输入框 -->
    <EditText
        android:id="@+id/et_username"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:hint="用户名"
        android:padding="10dp"
        android:layout_marginBottom="15dp"
        android:background="@android:color/white"
        android:elevation="4dp"/>

    <!-- 密码输入框 -->
    <EditText
        android:id="@+id/et_password"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:hint="密码"
        android:padding="10dp"
        android:layout_marginBottom="15dp"
        android:background="@android:color/white"
        android:elevation="4dp"
        android:inputType="textPassword"/>

    <!-- 注册按钮 -->
    <Button
        android:id="@+id/btn_register"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:text="注册"
        android:background="#4299e1"
        android:padding="10dp"
        android:textColor="#3E2723"
        android:textSize="16sp" />
</LinearLayout>

主页面:

package com.example.faceapp.ui.main;

import static com.example.faceapp.api.ApiUrls.MEETING_SUMMARY_URL;

import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.example.faceapp.R;
import com.example.faceapp.model.User;
import com.example.faceapp.ui.adduser.AddUserActivity;
import com.example.faceapp.ui.changepassword.ChangePasswordActivity;
import com.example.faceapp.ui.importstudents.ImportStudentsActivity;
import com.example.faceapp.ui.selectlesson.SelectLessonActivity;
import com.example.faceapp.ui.importmeetinginfo.ImportMeetingInfoActivity;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private TextView tvUserInfo;
    private Button btnAddUser;
    private Button btnManageUsers;
    private Button btnChangePassword;
    private Button btnImportFaceData;
    private Button btnMeetingSummary;
    private Button btnSelectLesson;
    private Button btnImportMeetingInfo;

    private User user;
    private boolean isAdmin;
    private List<User> userList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化视图组件
        tvUserInfo = findViewById(R.id.tv_user_info);
        btnAddUser = findViewById(R.id.btn_add_user);
        btnManageUsers = findViewById(R.id.btn_manage_users);
        btnChangePassword = findViewById(R.id.btn_change_password);
        btnImportFaceData = findViewById(R.id.btn_import_face_data);
        btnMeetingSummary = findViewById(R.id.btn_meeting_summary);
        btnSelectLesson = findViewById(R.id.btn_select_lesson);
        btnImportMeetingInfo = findViewById(R.id.btn_import_meeting_info);

        // 获取登录用户信息
        SharedPreferences sharedPreferences = getSharedPreferences("user_info", MODE_PRIVATE);
        String userJson = sharedPreferences.getString("user", "");
        if (userJson != null && !userJson.isEmpty()) {
            user = new Gson().fromJson(userJson, User.class);
            if (user != null) {
                tvUserInfo.setText("欢迎," + user.getName());
                isAdmin = user.getId().equals("admin");
                if (!isAdmin) {
                    btnAddUser.setVisibility(View.GONE);
                }
            }
        }else{
            Toast.makeText(this, "未获取到用户信息,请重新登录", Toast.LENGTH_SHORT).show();
        }
        Log.d("MainActivity", "onCreate: User info retrieved");

        // 设置按钮点击事件监听器
        btnAddUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, AddUserActivity.class));
            }
        });

        btnManageUsers.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isAdmin) {
                    // 管理员用户管理逻辑
                    Toast.makeText(MainActivity.this, "用户管理功能待实现", Toast.LENGTH_SHORT).show();
                } else {
                    // 普通用户删除自己的逻辑
                    Toast.makeText(MainActivity.this, "删除当前用户功能待实现", Toast.LENGTH_SHORT).show();
                }
            }
        });

        btnChangePassword.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, ChangePasswordActivity.class));
            }
        });

        btnImportFaceData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, ImportStudentsActivity.class));
            }
        });

        btnMeetingSummary.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 跳转到指定端口的网页(与Web端相同)
                String url = MEETING_SUMMARY_URL;
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                if (intent.resolveActivity(getPackageManager()) != null) {
                    startActivity(intent);
                } else {
                    Toast.makeText(MainActivity.this, "无法打开网页", Toast.LENGTH_SHORT).show();
                }
            }
        });

        btnSelectLesson.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, SelectLessonActivity.class));
            }
        });

        btnImportMeetingInfo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this, ImportMeetingInfoActivity.class));
            }
        });
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:background="#f5f7fa">

    <!-- 用户信息栏 -->
    <TextView
        android:id="@+id/tv_user_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:padding="10dp"
        android:background="@android:color/white"
        android:elevation="4dp"
        android:textColor="#000"
        android:textStyle="bold"
        android:layout_marginBottom="20dp"/>

    <!-- 左侧面板:用户管理 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@android:color/white"
        android:padding="16dp"
        android:elevation="4dp"
        android:layout_marginBottom="20dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户管理"
            android:textSize="18sp"
            android:textStyle="bold"
            android:layout_marginBottom="10dp"/>

        <Button
            android:id="@+id/btn_add_user"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="添加用户"
            android:drawableLeft="@android:drawable/ic_input_add"
            android:drawablePadding="10dp"
            android:layout_marginBottom="10dp"/>

        <Button
            android:id="@+id/btn_manage_users"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="管理用户"
            android:drawableLeft="@android:drawable/ic_menu_manage"
            android:drawablePadding="10dp"
            android:layout_marginBottom="10dp"/>

        <Button
            android:id="@+id/btn_change_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="修改密码"
            android:drawableLeft="@android:drawable/ic_lock_lock"
            android:drawablePadding="10dp"/>
    </LinearLayout>

    <!-- 右侧面板:操作按钮 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@android:color/white"
        android:padding="16dp"
        android:elevation="4dp">

        <!-- 操作按钮组 -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="4"
            android:layout_marginBottom="20dp">

            <Button
                android:id="@+id/btn_import_face_data"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="添加人脸数据"
                android:drawableTop="@android:drawable/ic_menu_gallery"
                android:drawablePadding="5dp"
                android:layout_marginRight="5dp"/>

            <Button
                android:id="@+id/btn_meeting_summary"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="会议总结"
                android:drawableTop="@android:drawable/ic_menu_sort_by_size"
                android:drawablePadding="5dp"
                android:layout_marginRight="5dp"/>

            <Button
                android:id="@+id/btn_select_lesson"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="开启会议"
                android:drawableTop="@android:drawable/ic_media_play"
                android:drawablePadding="5dp"
                android:layout_marginRight="5dp"/>

            <Button
                android:id="@+id/btn_import_meeting_info"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="会议信息导入"
                android:drawableTop="@android:drawable/ic_menu_upload"
                android:drawablePadding="5dp"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

posted @ 2025-05-21 23:37  sword_kong  阅读(6)  评论(0)    收藏  举报