# Java (Android) 项目:新闻阅读 App ## 概述 使用 Java 和现代 Android 技术栈构建一个新闻阅读应用。应用从 REST API (如 NewsAPI.org) 获取文章,支持文章列表、详情、分类和搜索,并具备离线缓存功能。 ## 功能需求 ### 1. 主屏幕 (文章列表) - **界面**: 使用 `RecyclerView` 显示文章列表(标题, 来源, 时间, 缩略图)。 - **数据**: 启动时加载头条新闻,支持下拉刷新和无限滚动分页。 - **导航**: 点击列表项跳转到详情页。 ### 2. 文章详情页 - **界面**: 使用 `WebView` 显示文章原始网页。 - **操作**: 提供“分享”和“在浏览器中打开”按钮。 ### 3. 分类筛选 - **界面**: 使用 `TabLayout` 让用户按类别(商业, 科技等)筛选文章。 - **功能**: 切换 Tab 时,重新请求对应类别的新闻。 ### 4. 搜索 - **界面**: 在 AppBar 中提供 `SearchView` 图标。 - **功能**: 用户输入关键词后,请求并显示搜索结果。 ### 5. 离线缓存 - **机制**: 使用 Room 将网络数据缓存到本地数据库。 - **体验**: 离线时显示缓存数据,在线时优先请求网络数据。 ## 技术栈 - **语言**: Java - **架构**: MVVM - **核心组件**: AndroidX (RecyclerView, SwipeRefreshLayout, etc.) - **Jetpack**: ViewModel, LiveData, Room, Navigation Component - **网络**: Retrofit2 - **JSON**: Gson 或 Moshi - **图片加载**: Glide 或 Picasso - **依赖注入**: Dagger/Hilt (可选) ## 项目结构 ``` /news-app └── app/src/main/ ├── java/com/example/newsapp/ │ ├── MainActivity.java │ ├── ui/ # Fragments & Activities │ ├── viewmodel/ # ViewModels │ ├── data/ # 数据层 (model, remote, local) │ └── repository/ # 数据仓库 └── res/ # 资源 (layout, menu, navigation) ``` ## 任务步骤 1. **项目设置**: 创建 Android Studio 项目,在 `build.gradle` 添加所需依赖。 2. **API准备**: 获取 NewsAPI.org 的免费 API 密钥。 3. **网络层**: 使用 Retrofit 定义 API 接口,创建匹配 JSON 的数据模型。 4. **数据库层**: 使用 Room 定义 `Article` 实体、DAO 和数据库。 5. **数据仓库**: 创建 `NewsRepository` 作为统一数据入口,管理网络和本地数据。 6. **ViewModel**: 创建 `MainViewModel`,通过 Repository 获取 `LiveData` 封装的新闻数据。 7. **UI开发**: 创建 `MainFragment` (观察 LiveData 并更新 RecyclerView) 和 `DetailFragment` (使用 WebView)。 8. **导航**: 使用 Navigation Component 配置 `MainFragment` 和 `DetailFragment` 间的导航。 9. **高级功能**: 逐步实现下拉刷新、无限滚动、分类和搜索。 10. **测试**: 为 ViewModel 和 Repository 编写单元测试。 **先行任务**: 设计 `Article` 和 `Source` 数据模型,并确定 NewsAPI 的端点和查询参数。