网络资源模板--Android Studio 图书借阅App

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码


一、项目演示

网络资源模板--图书借阅App

二、项目测试环境

三、项目详情

首页

这段代码是一个 Android 应用的 `MainActivity` 类,功能简要总结如下:

  1. **界面设置**:
  • 在 `onCreate` 方法中,设置活动的布局为 `activity_main.xml`。

  • 通过 `bindView` 方法初始化两个按钮:`btnUserEnter` 和 `btnAdminEnter`。

  1. **按钮点击事件**:
  • 为 `btnUserEnter` 和 `btnAdminEnter` 设置点击监听器,点击任一按钮都会启动 `LoginActivity`。
  1. **权限请求**:
  • 在 `requestPermissions` 方法中,使用 `XXPermissions` 库请求读写外部存储权限。

  • 如果权限被授予,调用 `DataUtils.init()` 进行初始化。

  • 如果权限被拒绝,弹出一个 Toast 提示用户。

这个活动的主要功能是提供用户和管理员进入登录界面的按钮,并在应用启动时请求所需的存储权限。

java 复制代码
 private void initView() {
        btnUserEnter.setOnClickListener(v->{
            startActivity(new Intent(MainActivity.this, LoginActivity.class));

        });
        btnAdminEnter.setOnClickListener(v -> {
            startActivity(new Intent(MainActivity.this, LoginActivity.class));
        });
    }

登录注册页面

这段代码包含两个活动:`LoginActivity` 和 `RegisterActivity`,它们一起实现了用户登录和注册的功能。以下是它们的功能简要总结:

`LoginActivity` 功能:

  1. **用户界面初始化**:
  • 设置布局并初始化界面元素(用户名、密码输入框、登录按钮、记住我复选框和注册链接)。
  1. **记住用户信息**:
  • 从 `CurrentUserUtils` 获取当前用户信息,并填充用户名和密码(如果选中"记住我"复选框)。
  1. **登录功能**:
  • 用户点击登录按钮时,首先检查用户名和密码是否为"admin"。

  • 如果是,则跳转到 `BookManageActivity`。

  • 如果不是,则调用 `UserDB.login()` 方法进行登录,处理返回的结果。

  • 登录成功后,将用户信息存储并跳转到 `NavActivity`;否则,弹出错误消息。

  1. **注册链接**:
  • 点击注册链接时,启动 `RegisterActivity` 并等待结果。
  1. **处理注册结果**:
  • 如果注册成功,将注册的用户信息填充到输入框中。

`RegisterActivity` 功能:

  1. **用户界面初始化**:
  • 设置布局并初始化界面元素(用户名、密码输入框、再次输入密码按钮和返回按钮)。
  1. **返回按钮**:
  • 点击返回按钮关闭当前活动。
  1. **注册功能**:
  • 用户点击注册按钮时,获取输入的用户名和密码,并创建 `User` 对象。

  • 调用 `UserDB.register()` 方法进行注册,处理返回的结果。

  • 如果注册成功,将用户信息返回到 `LoginActivity` 并关闭当前活动;否则,弹出消息提示注册结果。

总结:

整体上,这段代码实现了用户的登录和注册功能,包括记住用户信息、处理注册和登录逻辑,以及相应的界面交互。用户可以在登录页面输入信息,若未注册可通过链接跳转到注册页面。注册完成后,信息会返回至登录页面以便快速登录。

java 复制代码
  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_REGISTER && resultCode == RESULT_OK) {
            if (data != null) {
                User user = (User) data.getSerializableExtra("user");
                etUsername.setText(user.getUsername());
                etPassword.setText(user.getPassword());
            }
        }
    }

 this.btn_register.setOnClickListener(v -> {
            String obj = RegisterActivity.this.etUsername.getText().toString();
            String obj2 = RegisterActivity.this.etPassword.getText().toString();
            String obj3 = RegisterActivity.this.etPasswordAgain.getText().toString();
            User user = new User();
            user.setUsername(obj);
            user.setPassword(obj2);
            BusinessResult<User> register = UserDB.register(user, obj3);
            Toast.makeText(RegisterActivity.this, register.getMessage(), Toast.LENGTH_SHORT).show();
            if (register.isSuccess()) {
                Intent intent = new Intent();
                intent.putExtra("user", user);
                RegisterActivity.this.setResult(-1, intent);
                RegisterActivity.this.finish();
            }
        });

图书管理页面

这段代码定义了 `BookManageActivity` 类,主要功能如下:

功能总结:

  1. **界面设置**:
  • 在 `onCreate` 方法中,初始化活动的布局和界面元素,包括 RecyclerView(书籍管理列表)、添加书籍的文本视图和返回按钮。
  1. **书籍管理**:
  • 使用 `BookManageAdapter` 来管理 RecyclerView 中的书籍数据。

  • 设置点击事件,允许用户查看书籍详情或编辑书籍信息。

  1. **添加书籍**:
  • 点击添加书籍文本时,启动 `BookEditActivity` 以添加新书籍。
  1. **返回功能**:
  • 点击返回图标时,结束当前活动并返回到上一个界面。
  1. **刷新书籍列表**:
  • 在 `onResume` 方法中,调用 `BookDB.getAllBooks()` 更新书籍列表,确保显示最新数据。

总体而言,`BookManageActivity` 提供了书籍管理的基本界面和交互功能,用户可以查看、编辑书籍或添加新书籍。

java 复制代码
  private void bindView() {
        this.rvBookManage = (RecyclerView) findViewById(R.id.rv_book_manage);
        this.tvAdd = (TextView) findViewById(R.id.tv_add);
        this.ivBack = (ImageView) findViewById(R.id.iv_back);
    }

    private void initView() {
        this.ivBack.setOnClickListener(view -> finish());
        this.tvAdd.setOnClickListener(view ->
                startActivity(new Intent(BookManageActivity.this, BookEditActivity.class))
        );

        BookManageAdapter bookManageAdapter = new BookManageAdapter();
        this.adapter = bookManageAdapter;

        bookManageAdapter.setOnItemClickListener(new BookManageAdapter.OnItemClickListener() {
            @Override
            public void onItemDetailClick(int position, Book book) {
                Intent intent = new Intent(BookManageActivity.this, BookDetailActivity.class);
                intent.putExtra("book", book);
                startActivity(intent);
            }

            @Override
            public void onItemEditClick(int position, Book book) {
                Intent intent = new Intent(BookManageActivity.this, BookEditActivity.class);
                intent.putExtra("book", book);
                startActivity(intent);
            }
        });

        this.rvBookManage.setAdapter(this.adapter);
        this.rvBookManage.setLayoutManager(new LinearLayoutManager(this));
    }

添加修改图书页面

这段代码实现了 `BookEditActivity` 类,主要用于编辑或添加书籍信息,功能如下:

功能总结:

  1. **界面初始化**:
  • 在 `onCreate` 方法中,设置布局并初始化各个视图元素,包括返回按钮、书籍信息输入框、图片选择和提交按钮。
  1. **数据处理**:
  • 从意图中获取书籍对象。如果存在,则填充书籍信息并显示编辑选项;否则,准备添加新书籍。
  1. **用户交互**:
  • 用户可以通过点击返回按钮关闭活动。

  • 点击书籍图片或选择文本框可打开相册选择书籍封面。

  • 提交按钮根据是否编辑更新或添加书籍,使用 `BookDB` 进行数据库操作,并通过 Toast 显示操作结果。

  1. **删除功能**:
  • 提供删除书籍的选项,调用数据库方法删除书籍并反馈结果。
  1. **处理相册选择结果**:
  • 在 `onActivityResult` 中处理用户选择的图片路径,并更新书籍封面。

整体而言,`BookEditActivity` 提供了完整的书籍信息编辑和添加功能,允许用户更新现有书籍信息或添加新书籍,同时提供了删除书籍的选项。

java 复制代码
 private void initView() {
        tvTitle.setText(isEdit ? "编辑图书" : "添加图书");
        ivBack.setOnClickListener(view -> finish());
        ivBookImg.setOnClickListener(view -> AlbumUtils.openAlbum(BookEditActivity.this));
        tvSelect.setOnClickListener(view -> AlbumUtils.openAlbum(BookEditActivity.this));
        btnSubmit.setOnClickListener(view -> {
            book.setName(etBookName.getText().toString());
            book.setAuthor(etBookAuthor.getText().toString());
            book.setDesc(etBookDesc.getText().toString());
            book.setTotal(Integer.parseInt(etBookTotal.getText().toString()));
            BusinessResult<Book> businessResult = isEdit ? BookDB.updateBook(book) : BookDB.addBook(book);
            Toast.makeText(BookEditActivity.this, businessResult.getMessage(), Toast.LENGTH_SHORT).show();
            if (businessResult.isSuccess()) {
                finish();
            }
        });
        tvDelete.setOnClickListener(view -> {
            BusinessResult<Void> deleteBook = BookDB.deleteBook(book.getId().intValue());
            Toast.makeText(BookEditActivity.this, deleteBook.getMessage(), Toast.LENGTH_SHORT).show();
            if (deleteBook.isSuccess()) {
                finish();
            }
        });
    }

图书详情页

这段代码实现了 `BookDetailActivity` 类,用于显示书籍详细信息,功能总结如下:

功能总结:

  1. **界面设置**:
  • 在 `onCreate` 方法中,设置活动的布局并从意图中获取书籍对象。
  1. **信息展示**:
  • 使用 Glide 加载书籍封面图片,并显示书名、作者、描述以及剩余数量和总数。
  1. **返回功能**:
  • 设置返回按钮的点击事件,允许用户返回到前一个界面。

整体而言,`BookDetailActivity` 提供了简单明了的界面,展示了书籍的详细信息,确保用户能方便地查看书籍内容。

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"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="54.0dip"
        android:background="@color/main">

        <androidx.appcompat.widget.AppCompatImageView
            android:id="@id/iv_back"
            android:layout_width="54.0dip"
            android:layout_height="54.0dip"
            android:gravity="center"
            android:padding="12.0dip"
            android:src="@drawable/ic_back"
            android:text="返回"
            android:textColor="@color/white" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="详情"
            android:textColor="@color/white"
            android:textSize="18.0sp"
            android:textStyle="bold" />
    </FrameLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="16.0dip"
            android:orientation="vertical">

            <com.google.android.material.imageview.ShapeableImageView
                android:id="@id/iv_book_img"
                android:layout_width="120.0dip"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:src="@drawable/book1"
                app:shapeAppearanceOverlay="@style/RoundedCorner" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@id/tv_book_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16.0dip"
                android:ellipsize="end"
                android:gravity="start"
                android:maxLines="1"
                android:text="思辨力35讲:像辩手一样思考"
                android:textColor="@color/black"
                android:textSize="15.0sp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toStartOf="@id/tv_book_detail"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@id/tv_book_num"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="剩余:6       总数:10"
                android:textColor="@color/main"
                android:textSize="10.0sp" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@id/tv_book_author"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16.0dip"
                android:text="庞颖"
                android:textColor="#ffb0b0b0"
                android:textSize="12.0sp" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@id/tv_book_desc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="bottom"
                android:text="本书是一套帮助你识破逻辑陷阱,迅速提升分析、表达问题的实用指南。"
                android:textColor="#ffb0b0b0"
                android:textSize="12.0sp" />
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>
</LinearLayout>

图书列表

借阅信息

四、完整的项目源码

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

相关推荐
鸿蒙布道师1 小时前
鸿蒙NEXT开发动画案例2
android·ios·华为·harmonyos·鸿蒙系统·arkui·huawei
androidwork1 小时前
Kotlin Android工程Mock数据方法总结
android·开发语言·kotlin
love530love3 小时前
好消息!PyCharm 社区版现已支持直接选择 WSL 终端为默认终端
linux·ide·人工智能·windows·python·pycharm
xiangxiongfly9153 小时前
Android setContentView()源码分析
android·setcontentview
人间有清欢4 小时前
Android开发补充内容
android·okhttp·rxjava·retrofit·hilt·jetpack compose
人间有清欢5 小时前
Android开发报错解决
android
每次的天空7 小时前
Android学习总结之kotlin协程面试篇
android·学习·kotlin
一起喝芬达20107 小时前
cursor平替,试试 vscode+cline+openrouter 的方案,还能自定义 mcp-server 教程大纲
ide·ai·ai编程
工具罗某人7 小时前
IDEA 2024 版本配置热部署
java·ide·intellij-idea
每次的天空9 小时前
Android学习总结之Binder篇
android·学习·binder