中国诗词学习应用开发实践

一、前言

在移动互联网时代,传统文化的传承与创新成为了一个重要课题。中国诗词作为中华文化的瑰宝,如何通过现代技术手段让更多人接触和喜爱,是我们开发团队一直思考的问题。本文将介绍我们开发的中国诗词学习应用,详细阐述其功能模块的实现过程和技术要点,希望能为类似项目的开发提供参考。

二、项目概述

本项目是一个基于Android平台的中国诗词学习应用,旨在通过现代化的交互方式,让用户更加便捷地学习和欣赏中国古典诗词。应用采用了MVVM架构模式,使用了OkGo和OkHttp进行网络请求,Glide进行图片加载,以及RecyclerView实现列表数据展示。

项目定位

  • 面向人群:诗词爱好者、学生、教师等对中国古典诗词感兴趣的用户
  • 核心价值:提供便捷的诗词学习工具,传承和弘扬中国传统文化
  • 技术目标:打造一个功能完善、用户体验良好的诗词学习应用

整体架构

应用采用了模块化的设计思想,将不同功能封装在不同的Activity和Fragment中,提高了代码的可维护性和可扩展性。整体架构如下:

  • 主界面:使用BottomNavigationView实现底部导航,包含四个核心Fragment:首页、分类、社区、我的
  • 功能模块:包括诗词浏览、搜索、收藏、笔记、AI问答、社区互动等
  • 数据层:通过API接口与后端服务器进行数据交互
  • UI层:使用RecyclerView、CoordinatorLayout等组件实现响应式布局

三、核心功能模块实现

1. 主界面模块

功能描述:应用的主入口,使用BottomNavigationView实现底部导航,包含四个核心Fragment:首页、分类、社区、我的。

技术实现

  • 使用FragmentTransaction管理Fragment的切换
  • 实现了AcFragmentListener接口,用于Fragment与Activity之间的通信
  • 底部导航栏的点击事件处理

关键代码

private void selectedFragment(int position) {
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    hideFragment(fragmentTransaction);
    if (position == 0) {
        if (mHomeFragment == null) {
            mHomeFragment = new HomeFragment();
            fragmentTransaction.add(R.id.fragment_container, mHomeFragment);
        } else {
            fragmentTransaction.show(mHomeFragment);
        }
    } else if (position == 1) {
        // 分类Fragment
    } else if (position == 2) {
        // 社区Fragment
    } else {
        // 个人中心Fragment
    }
    fragmentTransaction.commit();
}

2. 首页模块

功能描述:应用的核心页面,包含轮播图、功能模块入口和猜你喜欢推荐列表。

技术实现

  • 使用Banner库实现轮播图效果
  • 功能模块入口的点击事件处理
  • 猜你喜欢推荐列表的实现
  • 登录状态的判断和跳转

关键功能点

  • 诗词鉴赏:跳转到分类页面
  • 诗词搜索:跳转到搜索页面
  • AI问答:跳转到AI问答页面
  • 名句默写:预留功能
  • 每日一读:跳转到每日一读页面
  • 收藏夹:跳转到收藏列表页面(需登录)
  • 笔记管理:跳转到笔记管理页面(需登录)
  • 分享诗词:预留功能

3. 分类模块

功能描述:按朝代分类展示诗词,用户可以选择不同朝代查看对应诗词。

技术实现

  • 水平RecyclerView实现分类标签
  • 垂直RecyclerView实现诗词列表
  • 分类标签的点击事件处理
  • 空布局处理

关键代码

private void queryPoetryListByCategory() {
    OkGo.<String>get(ApiConstants.QUERY_POETRY_LIST_BY_CATEGORY_URL)
            .params("dynasty", dynasty)
            .execute(new HttpStringCallback(getActivity()) {
                @Override
                protected void onSuccess(String msg, String response) {
                    PoetryListInfo poetryListInfo = GsonUtils.parseJson(response, PoetryListInfo.class);
                    if (poetryListInfo != null && poetryListInfo.getList() != null) {
                        mPoetryList.clear();
                        mPoetryList.addAll(poetryListInfo.getList());
                        mPoetryListAdapter.notifyDataSetChanged();
                    }

                    // 显示空状态或列表
                    if (mPoetryList.isEmpty()) {
                        llEmpty.setVisibility(View.VISIBLE);
                    } else {
                        llEmpty.setVisibility(View.GONE);
                    }
                }
            });
}

4. 社区模块

功能描述:用户可以发布帖子、查看帖子列表、点赞、评论和分享帖子。

技术实现

  • 发布帖子页面(PostActivity):实现文本输入、图片上传、表单验证和提交功能
  • 帖子列表页面(PostFragment):使用RecyclerView实现帖子列表展示,显示用户头像、用户名
  • 帖子详情页面(PostDetailsActivity):使用CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout实现滑动效果,使用RecyclerView实现评论列表

关键功能点

  • 发布帖子:支持文本输入和图片上传
  • 帖子列表:显示用户头像、用户名、帖子内容、图片、时间和点赞数
  • 点赞功能:点击点赞按钮增加点赞数
  • 评论功能:跳转到帖子详情页面进行评论
  • 分享功能:分享帖子内容

5. 个人中心模块

功能描述:用户可以查看个人信息、管理收藏和笔记、查看足迹等。

技术实现

  • 用户信息展示和更新
  • 功能入口的点击事件处理
  • 登录状态的判断和跳转
  • 退出登录功能

关键功能点

  • 我的收藏:跳转到收藏列表页面(需登录)
  • 我的笔记:跳转到笔记管理页面(需登录)
  • 我的足迹:预留功能
  • 设置:预留功能
  • 关于我们:预留功能
  • 退出登录:清除用户信息并跳转到登录页面

6. 笔记管理模块

功能描述:用户可以查看、管理自己的诗词笔记,优先展示诗词数据,再展示笔记内容。

技术实现

  • 使用RecyclerView实现笔记列表展示
  • 实现了笔记的长按删除功能
  • 空布局处理,当没有笔记时显示空布局提示

关键代码

private void getNoteAllList() {
    OkGo.<String>get(ApiConstants.QUERY_NOTE_LIST_URL)
        .params("username", UserInfo.getUserInfo().getUsername())
        .execute(new HttpStringCallback(this) {
            @Override
            protected void onSuccess(String msg, String response) {
                NoteListInfo noteListInfo = GsonUtils.parseJson(response, NoteListInfo.class);
                if (noteListInfo != null && noteListInfo.getList() != null) {
                    mNoteInfoList = noteListInfo.getList();
                    if (mNoteInfoList.isEmpty()) {
                        llEmpty.setVisibility(View.VISIBLE);
                        rvNoteAllList.setVisibility(View.GONE);
                    } else {
                        llEmpty.setVisibility(View.GONE);
                        rvNoteAllList.setVisibility(View.VISIBLE);
                        setupAdapter();
                    }
                } else {
                    llEmpty.setVisibility(View.VISIBLE);
                    rvNoteAllList.setVisibility(View.GONE);
                }
            }
        });
}

7. AI问答模块

功能描述:与DeepSeek API进行单聊,实现AI问答功能,采用流式读取方式实现数据的渐进式加载与展示。

技术实现

  • 使用原生OkHttp客户端实现流式加载
  • 实时处理响应数据并更新UI
  • 优化用户体验,减少等待时间

关键代码

private void sendRequestToDeepSeek(String message) {
    OkHttpClient client = new OkHttpClient();
    MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    RequestBody body = RequestBody.create(JSON, requestBody.toString());
    Request request = new Request.Builder()
        .url("https://api.deepseek.com/v1/chat/completions")
        .header("Content-Type", "application/json")
        .header("Authorization", "Bearer sk-79ebf8e897734079a939da32a0bc2336")
        .post(body)
        .build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onResponse(Call call, Response response) {
            // 读取响应流并实时更新UI
        }
    });
}

8. 每日一读模块

功能描述:随机获取一首诗词进行展示,并提供朗读功能。

技术实现

  • 使用TextToSpeech实现文本朗读功能
  • 随机获取诗词数据
  • 诗词内容的展示

9. 搜索模块

功能描述:用户可以通过关键词搜索诗词。

技术实现

  • 搜索输入框的实现
  • 搜索结果的展示
  • 跳转到诗词详情页面

10. 诗词详情模块

功能描述:展示诗词的详细内容,包括标题、作者、朝代、内容等,并提供朗读、收藏、笔记功能。

技术实现

  • 诗词内容的展示
  • TextToSpeech实现文本朗读功能
  • 收藏功能的实现
  • 笔记功能的实现

四、技术实现细节

1. 网络请求封装

应用使用了OkGo库进行网络请求,并封装了HttpStringCallback类来处理响应。对于需要流式加载的场景(如AI问答),使用了原生OkHttp客户端。

2. 适配器设计

应用中的各个列表都使用了RecyclerView实现,并为每个列表创建了对应的适配器,如PostListAdapter、CommentAdapter等。适配器中实现了数据绑定、点击事件处理和空布局支持。

3. 登录状态管理

应用使用了UserInfo类来管理用户登录状态,在需要登录的功能中进行登录判断和跳转。

4. 空布局处理

应用中的各个列表页面都实现了空布局处理,当没有数据时显示友好的提示信息,提升了用户体验。

5. 图片加载

应用使用了Glide库进行图片加载,支持网络图片和本地图片的加载,以及圆形头像的显示。

6. 响应式布局

应用在帖子详情页面中使用了CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout实现了流畅的滑动效果,增强了界面的视觉体验。

五、技术亮点

  1. 流式数据加载:在AI问答模块中,使用OkHttp的ResponseBody和BufferedReader实时读取并解析API响应流,实现了数据的渐进式加载与展示,提升了用户体验。

  2. 响应式布局:在帖子详情页面中,使用CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout实现了流畅的滑动效果,增强了界面的视觉体验。

  3. 模块化设计:采用了模块化的设计思想,将不同功能封装在不同的Activity和Fragment中,提高了代码的可维护性和可扩展性。

  4. 空布局处理:在各个列表页面中,实现了空布局处理,当没有数据时显示友好的提示信息,提升了用户体验。

  5. 权限管理:在图片上传功能中,实现了Android运行时权限请求,确保应用的安全性。

  6. 用户状态管理:实现了用户登录状态的管理,在需要登录的功能中进行登录判断和跳转。

  7. RecyclerView优化:在各个列表页面中,使用RecyclerView实现数据展示,并通过适配器的优化提高了性能。

六、项目结构

app/
├── src/
│   ├── main/
│   │   ├── java/com/app/chinese/poetry/
│   │   │   ├── activity/          # 各个页面的Activity
│   │   │   ├── adapter/           # 适配器
│   │   │   ├── api/               # API常量
│   │   │   ├── base/              # 基础类
│   │   │   ├── entity/            # 实体类
│   │   │   ├── fragment/          # 碎片
│   │   │   ├── http/              # 网络请求
│   │   │   ├── utils/             # 工具类
│   │   │   └── MainActivity.java  # 主Activity
│   │   └── res/                   # 资源文件
│   └── AndroidManifest.xml        # 应用配置

七、 总结与展望

本项目成功实现了一个功能丰富的中国诗词学习应用,通过现代化的技术手段,为用户提供了便捷的诗词学习和社区互动功能。应用采用了模块化的设计思想,实现了首页、分类、社区、个人中心等核心功能模块,技术上使用了流式数据加载、响应式布局等先进技术,提升了用户体验。

未来,我们计划进一步完善应用功能,增加更多的诗词学习资源,优化AI问答的交互体验,以及添加更多的社区互动功能,让更多人通过这个应用感受到中国诗词的魅力。

通过这个项目,我们不仅实现了一个实用的诗词学习应用,也积累了丰富的Android开发经验,特别是在流式数据加载、响应式布局和模块化设计方面。希望本文能为类似项目的开发提供参考,共同推动传统文化的数字化传承与创新。

八、项目运行效果截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐