网络资源模板--Android Studio 健康管理系统

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


一、项目演示

网络资源模板--健康管理系统

二、项目测试环境

三、项目详情

基于安卓android的健康管理系统App源码。项目实现了欢迎页、登录、注册、后台管理(热量管理、食谱管理、用户管理)、运动记步、体重记录、健康档案、饮食记录、健康菜谱、我的、退出登录、网络请求、API接口调用、数据库等功能。

技术栈:23个Activity + 3个Fragment + RecyclerView + Sqlite数据库(一个数据库,八个数据表) + 图片选择库 + Glide图片加载 + Okhttp网络请求 + API接口调用 + Gson数据解析 + MPAndroidChart图表 + ImageView + TextView + FloatingActionButton + EditText + Button + WebView + RadioGroup + RadioButton + 自定义SportStepView + ScrollView

注册登录页面

  1. 用户输入信息:用户可以输入账号、昵称、手机号、地址、密码及确认密码,同时选择性别并上传头像。

  2. 头像选择:点击头像区域,可以打开图库选择图片,支持裁剪和压缩功能,并使用 Glide 加载预览图像。

  3. 输入验证:在注册时进行多项输入验证,如检查头像、账号、昵称、手机号、地址、密码的有效性,以及确保密码一致性。

  4. 数据库操作:通过 SQLite 数据库检查用户是否已存在,若不存在则插入新用户记录。

  5. 反馈与提示:在注册成功或输入错误时,通过 Toast 提供用户反馈。

  6. 导航功能:提供跳转到登录界面的功能,方便已有用户登录

  this.btnRegister.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // 获取输入的注册信息
                String account = etAccount.getText().toString();
                String nickName = etNickName.getText().toString();
                String phone = etPhone.getText().toString();
                String address = etAddress.getText().toString();
                String password = etPassword.getText().toString();
                String passwordSure = etPasswordSure.getText().toString();

                // 输入验证
                if ("".equals(imagePath)) {
                    Toast.makeText(RegisterActivity.this, "请上传头像", Toast.LENGTH_SHORT).show();
                } else if ("".equals(account)) {
                    Toast.makeText(RegisterActivity.this, "用户名不能为空", Toast.LENGTH_SHORT).show();
                } else if ("".equals(nickName)) {
                    Toast.makeText(RegisterActivity.this, "昵称不能为空", Toast.LENGTH_SHORT).show();
                } else if ("".equals(phone)) {
                    Toast.makeText(RegisterActivity.this, "手机号不能为空", Toast.LENGTH_SHORT).show();
                } else if (phone.length() != 11) {
                    Toast.makeText(RegisterActivity.this, "手机号格式错误", Toast.LENGTH_SHORT).show();
                } else if ("".equals(address)) {
                    Toast.makeText(RegisterActivity.this, "地址不能为空", Toast.LENGTH_SHORT).show();
                } else if ("".equals(password)) {
                    Toast.makeText(RegisterActivity.this, "密码为空", Toast.LENGTH_SHORT).show();
                } else if (!password.equals(passwordSure)) {
                    Toast.makeText(RegisterActivity.this, "密码不一致", Toast.LENGTH_SHORT).show();
                } else {
                    String sex = rgSex.getCheckedRadioButtonId() == R.id.rb_man ? "男" : "女"; // 获取性别
                    User mUser = null; // 初始化用户对象
                    SQLiteDatabase db = helper.getWritableDatabase(); // 获取可写数据库

                    // 查询是否已有相同用户名
                    Cursor cursor = db.rawQuery("select * from user where account = ?", new String[]{account});
                    if (cursor != null && cursor.getColumnCount() > 0) {
                        while (cursor.moveToNext()) {
                            mUser = new User(cursor.getInt(0), cursor.getString(1), cursor.getString(2),
                                    cursor.getString(3), cursor.getString(4), cursor.getString(5),
                                    cursor.getString(6), cursor.getString(7));
                        }
                    }

                    // 如果用户不存在,则进行注册
                    if (mUser == null) {
                        db.execSQL("insert into user(account, password, name, sex, phone, address, photo) values(?,?,?,?,?,?,?)",
                                new Object[]{
                                        account, password, nickName, sex, phone, address, imagePath
                                });
                        Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
                        finish(); // 注册成功后结束当前活动
                    } else {
                        Toast.makeText(RegisterActivity.this, "该账号已存在", Toast.LENGTH_SHORT).show(); // 账号已存在提示
                    }
                    db.close(); // 关闭数据库连接
                }
            }
        });
    }

  1. 用户输入:提供账号和密码输入框,用户可以输入登录凭证。

  2. 输入验证:在用户点击登录按钮时,检查输入是否为空,并显示相应的提示信息。

  3. 数据库查询:查询 SQLite 数据库,验证用户账号是否存在以及密码是否正确。

  4. 默认管理员登录:支持默认的管理员账号(账号为 "admin" 和密码为 "123456"),若输入匹配,则跳转到管理员界面。

  5. 错误提示:如果账号不存在或密码错误,提供相应的错误提示。

  6. 跳转功能:根据登录结果,成功登录后跳转到主界面或管理界面,并结束当前活动。

  7. 用户信息存储:登录成功后,将用户 ID 存储在 SharedPreferences 中,以便后续使用

   this.btnLogin.setOnClickListener(v -> {
            String account = LoginActivity.this.etAccount.getText().toString(); // 获取输入的账号
            String password = LoginActivity.this.etPassword.getText().toString(); // 获取输入的密码

            // 校验输入
            if ("".equals(account)) {
                Toast.makeText(LoginActivity.this, "用户名不能为空", Toast.LENGTH_SHORT).show(); // 账号不能为空提示
            } else if ("".equals(password)) {
                Toast.makeText(LoginActivity.this, "密码不能为空", Toast.LENGTH_SHORT).show(); // 密码不能为空提示
            } else if (!account.equals("admin") || !password.equals("123456")) { // 如果不是默认账号和密码
                User mUser = null; // 初始化用户对象
                SQLiteDatabase db = LoginActivity.this.helper.getWritableDatabase(); // 获取可写数据库
                // 查询数据库中的用户
                Cursor cursor = db.rawQuery("select * from user where account = ?", new String[]{account});
                if (cursor != null && cursor.getColumnCount() > 0) {
                    while (cursor.moveToNext()) {
                        // 创建用户对象
                        mUser = new User(
                                Integer.valueOf(cursor.getInt(0)),
                                cursor.getString(1),
                                cursor.getString(2),
                                cursor.getString(3),
                                cursor.getString(4),
                                cursor.getString(5),
                                cursor.getString(6),
                                cursor.getString(7)
                        );
                    }
                }
                db.close(); // 关闭数据库

                // 根据查询结果进行判断
                if (mUser == null) {
                    Toast.makeText(LoginActivity.this, "账号不存在", Toast.LENGTH_SHORT).show(); // 提示账号不存在
                } else if (!password.equals(mUser.getPassword())) {
                    Toast.makeText(LoginActivity.this, "密码错误", Toast.LENGTH_SHORT).show(); // 提示密码错误
                } else {
                    SPUtils.put(LoginActivity.this, SPUtils.USER_ID, mUser.getId()); // 保存用户ID到SharedPreferences
                    LoginActivity.this.startActivity(new Intent(LoginActivity.this, MainActivity.class)); // 跳转到主活动
                    LoginActivity.this.finish(); // 关闭当前活动
                }
            } else { // 如果是默认的管理员账号
                LoginActivity.this.startActivity(new Intent(LoginActivity.this, ManagerActivity.class)); // 跳转到管理活动
                LoginActivity.this.finish(); // 关闭当前活动
            }
        });
    }

首页

  1. 用户输入:用户可以输入身高和体重,并选择性别(男性或女性)。

  2. BMI 计算:通过点击计算按钮,Fragment 会收集用户输入,并通过 API 请求计算 BMI。

  3. API 请求:使用网络工具发起 GET 请求,向外部 API 发送身高、体重和性别数据,以获取 BMI 结果。

  4. 结果展示:成功获取结果后,弹出对话框显示 BMI 指数及相关信息(如理想体重、正常体重范围等)。如果计算失败,则显示相应的提示信息。

  5. 页面导航:提供多个入口,用户可以点击不同的布局,跳转到其他活动(如饮食记录、运动记录等)

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        this.helper = new MySqliteOpenHelper(this.myActivity);
        this.ll_food_energy = (LinearLayout) view.findViewById(R.id.ll_food_energy);
        this.ll_weight = (LinearLayout) view.findViewById(R.id.ll_weight);
        this.ll_diet = (LinearLayout) view.findViewById(R.id.ll_diet);
        this.ll_lose_weight = (LinearLayout) view.findViewById(R.id.ll_lose_weight);
        this.ll_health_record = (LinearLayout) view.findViewById(R.id.ll_health_record);
        this.ll_sport_record = (LinearLayout) view.findViewById(R.id.ll_sport_record);
        this.ll_lose_weight = (LinearLayout) view.findViewById(R.id.ll_lose_weight);
        this.etHeight = (EditText) view.findViewById(R.id.et_height);
        this.etWeight = (EditText) view.findViewById(R.id.et_weight);
        this.rgSex = (RadioGroup) view.findViewById(R.id.rg_sex);
        this.btnCalculate = (Button) view.findViewById(R.id.btn_calculate);
        initView();
        this.ll_food_energy.setOnClickListener(v -> {
            HomeFragment.this.startActivity(new Intent(HomeFragment.this.myActivity, FoodEnergyActivity.class));
        });
        this.ll_weight.setOnClickListener(v -> {
            HomeFragment.this.startActivity(new Intent(HomeFragment.this.myActivity, WeightRecordActivity.class));
        });
        this.ll_diet.setOnClickListener(v -> {
            HomeFragment.this.startActivity(new Intent(HomeFragment.this.myActivity, DietActivity.class));
        });
        this.ll_lose_weight.setOnClickListener(v -> {
            HomeFragment.this.startActivity(new Intent(HomeFragment.this.myActivity, LoseWeightActivity.class));
        });
        this.ll_health_record.setOnClickListener(v -> {
            HomeFragment.this.startActivity(new Intent(HomeFragment.this.myActivity, HealthRecordActivity.class));
        });
        this.ll_sport_record.setOnClickListener(v -> {
            HomeFragment.this.startActivity(new Intent(HomeFragment.this.myActivity, SportRecordActivity.class));
        });
        this.btnCalculate.setOnClickListener(v ->
        {
            HomeFragment.this.calculate();
        });
        return view;
    }

    private void initView() {
    }

四、完整的项目源码 

👇👇👇👇👇快捷获取方式👇👇👇👇👇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值