一、作业题目

二、作业描述

互联网科技的发展让新闻的传播从报纸、广播、电视等方式发展到了网页以及最近几年兴起的手机app客户端,人们获取新闻的方式变得异常容易。手机上的新闻app让大家随时随地掏出手机即可看天下事,手机新闻app不再是一个简简单单的新闻获取工具,许多app已经利用数据挖掘构建出了新闻推荐引擎,为用户提供个性化、更有价值的新闻,例如今日头条、天天快报等。

现在让我们也来尝试一下做一个新闻app!本次大作业的任务就是实现一款新闻获取的工具类软件,其中新闻数据采用的是腾讯网的rss,同学们根据相关rss数据和作业要求利用课上所学的Java和android开发知识实现一个新闻客户端即可。

三、接口描述

本次大作业需要开发的系统结构如图1所示,实现了新闻内容的抓取和存储;客户端从服务器拉取新闻,是学生需要完成的部分,包括新闻频道获取、展示和管理,新闻列表的获取、展示以及刷新,新闻收藏、分享等。

四、具体实现

4.1 新闻列表

4.1.1 UI

APP主界面布局xml如下:

其中CoordinatorLayout用于协调布局中的部件的滑动,AppBarLayout用于显示标题并添加菜单,ViewPager用于显示新闻列表。

ViewPager中包含多个Fragment,每个Fragment布局xml如下:

其中SwipeRefreshLayout用于添加下拉刷新操作,RecyclerView中以垂直线性布局的方式显示新闻条目。

RecyclerView中的新闻条目布局xml如下:

即每个条目分为两行,第一行为新闻标题,以较大字体显示,第二行为新闻来源和发布时间,分别位于第二行左侧和第二行右侧,以较小字体显示。

4.1.2 功能实现

新闻列表中主要实现了以下功能:

下拉刷新获取新的新闻

该功能通过重载SwipeRefreshLayout中的onRefresh()功能实现。用户下拉页面会自动调用onRefresh()函数,app后台向服务器申请新闻数据,并更新后台的新闻列表;随后会调用Fragment的Adapter的notifyDataSetChanged函数,更新UI界面上所显示的数据。

上拉加载更多旧的新闻

该功能通过给RecyclerView添加SrollListener监测用户下拉动作,当列表下拉至接近最下端时,会向后台申请更多新闻数据,并调用notifyDataSetChanged函数更新UI界面上的数据。

新闻列表本地存储

该功能通过使用SQLiteOpenHelper类为app添加后台数据库,并在向服务器申请更新数据时将更新的数据放入数据库中。在app开启时会从数据库中取出新闻数据加载到内存中。

新闻是否看过的灰色标记

该功能通过新闻列表中ViewHolder的onClick函数实现。当用户点击某一新闻条目时,会更改该条目的颜色为灰色。同时,阅读标记也会被更新到数据库中,下一次打开程序时灰色标记不会消失。

新闻搜索

该功能通过主页面上的Menu中的条目点击实现。点击Menu中的search条目会弹出AlertDialog搜索框。搜索功能通过对后台新闻数据进行搜索实现,并将搜索到的新闻显示在search Fragment上。

搜索示例1

搜索示例2

新闻分类添加和删除操作

该功能通过主页面上的Menu中的条目点击实现。点击Menu中的category条目会弹出多选框,对需要的category进行选中即可。用户选中后点击确定,调用函数对后台选中category的数据进行更新,并调用notifyDataSetChanged函数添加和清除相关页面。

4.1.3 工作难点与亮点页面布局,使用了比较新的控件,需要学习的东西较多。在协调TabLayout和ViewPager中碰到较多问题,包括标题不显示,ViewPager显示空白等

数据加载,FragmentStatePagerAdapter使用较复杂。碰到了更新后台数据前台不刷新,以及删除Fragment后页面错位的问题。通过上网查阅资料,重载getItemPosition函数得以解决。此外使用了Loader类,对数据进行加载和更新

新闻分类和删除操作中,对Fragment的重构析构操作较多,碰到了一些问题

4.2 分享功能

4.2.1 实现方式

通过调用Android自带的原生分享功能Active_Send实现。由于微信SDK的问题,在同时分享文本与图片上遇到一些问题:微信6.6.7版本以后无法再使用”Kdescription”进行图片与文本的共同分享。

4.2.2 工作难点与亮点

图片URL获得方法

通过针对不同版本的android系统,重载不同的WebView的shouldInteruptRequest方法,在WebView加载网页时获取所加载资源的URL,并通过URL的所含字段判断是否为图片类型,从而直接获取图片URL。

图片下载与选择问题

通过BitmapFactory类对图片通过URL进行下载并保存。在保存过程中需要动态申请外存权限,申请过程写在了重载的onCreate函数中。

Uri传输问题

保存图片后,由于android较高版本对权限的控制,需要使用FileProvider类对图片URI进行获取并分享。

4.3 收藏功能

4.3.1 实现方法

通过为每一个NewsItem类添加一个favorite成员变量,记录每一条NewsItem是否被收藏过。收藏内容记录在本地,并可以通过服务器进行同步。

4.3.2 工作难点与亮点

数据更新问题

在设置收藏的时候,需要对页面进行实时刷新以便显示出最新添加的收藏。此外,需要避免数据重复的问题。

4.4 新闻推荐

4.4.1 实现方法

通过对用户阅读过的新闻与收藏的新闻进行记录,为每一个阅读与收藏记录赋予不同的权重,通过加和判断出用户对各分类的喜好顺序,排序后为用户更多推荐未阅读过的喜好顺序靠前的分类的新闻。

4.5 新闻评论

4.5.1 实现方法

通过获取用户手机mac地址将评论上传到服务器,服务器端判断是否登录,并决定显示mac地址或用户名。新闻评论自动与服务器同步。

4.5.2 实现难点与亮点

同步评论过程中需要对mac地址进行判断。评论显示布局需要设计。

评论示例1

评论示例2

4.6 服务器设计

4.6.1 实现方法

在服务器端使用Java语言写了一个多线程服务器,接收用户端的不同请求,包括注册,登录,刷新新闻,收藏新闻,同步收藏,同步评论等。并实现了新闻的mac地址记录缓存,服务器端保存功能,避免了新闻的遗漏。

注册,登录

在服务器端使用mysql数据库记录用户数据,在注册时判断用户名是否存在并返回成功或失败信息;在登录时判断用户名密码是否匹配,并记录登录的mac地址以便后续使用时无需再次登录。

刷新新闻

服务器端每5分钟爬取一次各分类的rss界面获取最新的新闻信息。客户端申请更新新闻时将最近的50条新闻传送给客户端,客户端可以判断传输的新闻是否已存在,并将新的新闻更新到UI界面中。

收藏新闻

服务器端记录每一个登录用户的收藏信息。客户端登录后自动同步收藏信息,并且接收客户端新建的收藏条目。客户端刷新页面后自动再次同步收藏信息。

4.6.2 工作难点与亮点

服务器与客户端同步

服务器与客户端同步时为多线程,避免了多个客户端的阻塞。

服务器本地存储

服务器本地创建mysql数据库对信息进行保存。

mac地址获取与缓存

客户端通过MacAddressFetcher类获取手机mac地址。由于android权限限制,获取方法较为复杂。

五、总结与心得

在本次新闻app项目的制作过程中,我学习到了android编程的相关知识和面向google编程的能力,也感受到了人在DDL面前的巨大潜力。7天的时间从不懂android编程到编出一个能够使用的新闻app,也让我自己很惊讶。但也由于时间关系和评分要求,所做出的app界面并不美观,也希望助教谅解。

附注实验手机型号:小米6

系统版本:MIUI10 8.8.23开发版,Android 8.0.0

android studio新闻界面,课内资源 - 基于Android Studio实现的新闻APP相关推荐

  1. android电梯程序设计,课内资源 - 基于Android实现的电梯调度模拟

    一.使用说明 1.1 项目简介 某一楼有20层,操作者可以通过使用5部电梯从起始楼层来到达指定的楼层.本项目通过实现电梯调度,来模拟实现操作系统的调度过程,并且学习Android环境下使用Java的多 ...

  2. android内存置换,课内资源 - 基于Android实现的页面置换模拟

    一.使用说明 1.1 项目简介 请求分页分配方式的模拟,包括页面.页表.地址的转换和页面置换过程,并通过该模拟过程加深对请求调页系统的原理和实现过程的理解.并且学习Android环境下使用Java编写 ...

  3. 基于linux的qt五子棋小游戏下载,课内资源 - 基于Qt的图形化界面网络在线对战五子棋游戏...

    一 需求分析 本软件是一款跨平台的网络实时五子棋对战软件,实现建立主机和连接主机.实时对战.判断输赢和危险提示等功能.支持Windows . Linux和OSX平台. 程序主要功能如下: 建立服务器 ...

  4. mysql -ss -e_课内资源 - 基于ssm框架和mysql的网上选课系统

    一.需求分析 1.1 业务需求 随着社会的发展,学生的人数和课程种类急速增加,传统的选课管理模式已经无法满足当前的实际需求,为此我们开发了学生选课管理系统.本人结合学生选课管理的实际需要,完成了对学生 ...

  5. java洗衣店管理课程设计报告_课内资源 - 基于Java的洗衣店管理系统

    摘 要 随着科技的快速发展,人们的需求也是越来越多,为了方便对信息的管理我们小组就设计了一个洗衣店订单的管理系统. 洗衣店管理系统是典型的的信息管理系统,创建了六个类,分别是:Test类:Person ...

  6. java基本语法借阅_课内资源 - 基于Java和MySql实现的光盘借阅管理系统

    一.需求设计以下几个类:光盘类:用户类:借阅记录类,包括下列模块: 新建.修改.删除光盘信息 新建.修改.删除用户信息 光盘借阅/归还信息记录 查询光盘名称,用户的借阅历史 要求:基于JFrame窗体 ...

  7. mysql餐馆点餐系统_课内资源 - 基于Jsp和MySql的餐厅点餐系统

    1 总体概述 本设计主要通过HTML.CSS.JavaScript网页开发技术,会话及其会话技术,过滤器技术,Java语言以及连接mysql数据库来实现一个具有登录注册功能,且登录页面使用验证码技术来 ...

  8. python+diango写酒店管理系统_课内资源 - 基于Python的Django框架实现的中式快餐厅管理信息系统网站...

    1 初步调研 随着餐饮业的连锁和国外餐饮巨头的进入,餐饮业的竞争将越来越激烈:要想在竞争中处于不败之地,必须在管理.服务等方面提高服务管理意识.面对当前餐饮业普遍的产业化程度低,管理手段.管理技术落后 ...

  9. python电梯题_课内资源 - 基于PyQt5实现的python电梯调度程序

    1. 使用说明 1.1 项目简介 电梯作为人们出行的重要工具之一,在人们日常生活中扮演着重要的角色.而电梯的调度算法是决定电梯运行效率的关键,一个高效的调度算法对电梯能否有效地运行起到重要的作用.因此 ...

最新文章

  1. 现实世界的Windows Azure:采访Figlo的全球合作伙伴支持经理Nathan Brouwer
  2. centos安装mysql5.7.19_Linux下Centos7安装Mysql5.7.19的详细教程
  3. MFC C++ 获取外网IP地址
  4. easy_Maze 梅津美治郎 寒假逆向生涯(16/100)
  5. Linux第一条指令地址,arm-linux 启动代码分析——stage1 (1)
  6. qt中设置QCheckBox的文本与勾选框之间的距离
  7. 腾讯云 mysql 密码_腾讯云mysql重新设置密码解决办法
  8. 10 种最流行的 Web 挖掘工具!
  9. java app支付_Java 微信支付之APP支付服务端 (一)
  10. 雷达系统仿真——线性调频信号的仿真
  11. 系统报.NET Framework 3.5缺失无法安装问题解决方案
  12. 如何批量清理DWG文件?DWG文件清理教程
  13. 如何发表SCI论文?写SCI文章的心得
  14. Weather API 天气应用 API调用分享
  15. discuz mysql cpu 100_Discuz导致MYSQL CPU 占用 100%?
  16. 发款php蜘蛛统计插件只要有mysql就可用
  17. 蚂蚁金服面试经验分享
  18. 搭建个人深度学习工作站
  19. Python抓取十万弹幕数据需多久?三分钟搞定并实现词云!
  20. 云IDE:Coding的Cloud Studio

热门文章

  1. 与武汉和黄州相关的几首诗词赋
  2. Element-ui配合Vue实现走马灯图片自适应效果
  3. 给拯救者Y7000换个固态
  4. 使用Element UI 开发页面遇到的问题之下拉菜单支持拼音缩写查询
  5. 对学生创业的重新认识
  6. 力源信息是鸿蒙概念股吗,力源信息(300184)个股分析_牛叉诊股_同花顺财经
  7. 【入门指南】Hello World, I‘m Mo
  8. ElasticSearch(全文检索服务的安装和使用)
  9. 2019武汉理工大学计算机考研经验分享
  10. 电脑不用,不用电脑,你还会写字吗?