Android期末项目 新闻APP的设计与实现(一)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS Agent(兼容OpenClaw),2核4GB
简介: Android期末项目 新闻APP的设计与实现

1 项目基本信息

1.1 项目名称

好好学习新闻APP的设计与实现

1.2 开发运行环境

Android Studio 2022

Android SDK 7.0

SQLite 5.4.1

Gradle 7.5

JDK 1.8.0

虚拟机 Pixel 2 API 30 2

1.3 使用的核心类及组件

Activity:Android系统中的四大组件之一,它是一种应用程序组件,用于提供用户交互界面和对用户输入的处理,每个Activity都会占用一个窗口来展示它的界面。

AppCompatActivity:支持Fragment的管理和兼容,在处理多个Fragment时,可以方便地使用FragmentTransaction等API进行管理和切换。

ViewPager:是Android中的一个控件,它是一个可以滑动切换子视图的容器,通常用于实现Tab切换、引导页面和轮播图等。

ListView:通过使用Adapter机制来绑定数据和视图,Adapter需要提供数据和视图,并根据数据创建对应的视图展示在ListView中。

Fragment:它可以让开发者在一个Activity中管理多个界面片段,使得界面的组合更加灵活。这些Fragment可以被添加到或移除出Activity中,而不影响其他Fragment以及整个Activity。

SQLiteOpenHelper:封装了SQLite数据库的一些底层操作,可以更加便捷地进行数据的存储和查询。同时,该类还提供了一些常用的API,如insert()、update()、delete()和query()等方法,分别用于执行插入、更新、删除和查询等数据操作。

2 项目需求分析

2.1 APP前台部分

(1)用户登录:如果用户想查看“好好学习新闻APP”的内容,首先必须使用账号和密码进行登录,也可点击记住密码,账号密码验证成功后可进入访问。

(2)用户注册:如果用户没有账号和密码,可以点击注册通过注册获取账号和密码,输入想要注册的账号和密码同意协议后点击注册可完成注册。

(3)用户浏览:用户通过账号密码登录成功后可以浏览新闻,用户可以选择推荐、要闻、思想、综合模块进行新闻浏览。

(4)用户查看:用户通过选择推荐、要闻、思想、综合这四个模块进行新闻查看,若遇到感兴趣的标题可以点进去查看全文。

3 项目开发过程

3.1 APP功能模块

3.1.1 用户登录功能:用户通过账号密码登录成功后可以进入系统内访问或者阅读当前新闻内容。

3.1.2 用户注册功能:如果用户没有访问该系统的权限,可以通过注册功能注册用户账号密码,注册成功后跳转登陆页面。

3.1.3页面浏览功能:用户注册并登录成功后,可以进入系统浏览推荐、要闻、思想、综合这四个新闻页面。

3.1.4 新闻查看功能:如果用户发现非常感兴趣的新闻标题或图片,可以点击该新闻进入详情页面进行阅读。

APP功能模块图

3.2 数据库设计

本APP在设计数据库时需要使用User表来实现。

用户表

字段

数据类型

主键

外键

是否为空

说明

Uid

char(32)

用户Id

Account

varchar(50)

用户账号

Pass

varchar(50)

用户密码

用户表实体图

3.3具体实现

3.1.1 用户登录功能:用户通过账号密码登录成功后可以进入系统内访问或者阅读当前新闻内容,如果用户经常忘记密码也可以点击记住密码选项。用户若没有账号密码可以点击右下角“还没有账号”跳转注册页面进行注册。

部分代码:

1. public class LoginActivity extends AppCompatActivity {
2. private Button btnLogin;
3. private EditText etAccount, etPassword;
4. private TextView toReg;
5. private CheckBox cb_Remember;
6. private MySQLiteOpenHelper mySQLiteOpenHelper;
7. @Override
8. protected void onCreate(@Nullable Bundle savedInstanceState) {
9. super.onCreate(savedInstanceState);
10.         setContentView(R.layout.activity_login);
11.         initView();
12.         initData();
13. //设置点击监听按钮
14.         btnLogin.setOnClickListener(new View.OnClickListener() {
15. @Override
16. public void onClick(View view) {
17. String account = etAccount.getText().toString();
18. String password = etPassword.getText().toString();
19.                 List<User> userList =  mySQLiteOpenHelper.selectByAccountAndPass(account,password);
20.                 System.out.println(userList);
21. if(!userList.isEmpty()){  //说明查到了
22.                     Toast.makeText(LoginActivity.this,"登录成功!",Toast.LENGTH_LONG).show();
23. if(cb_Remember.isChecked()){
24. SharedPreferences spf = getSharedPreferences("spfRecorid",MODE_PRIVATE);
25.                         SharedPreferences.Editor edit = spf.edit();
26.                         edit.putString("account", account);
27.                         edit.putString("password",password);
28.                         edit.putBoolean("isRemember",true);
29.                         edit.apply();
30.                     }else{
31. SharedPreferences spf = getSharedPreferences("spfRecorid",MODE_PRIVATE);
32.                         SharedPreferences.Editor edit = spf.edit();
33.                         edit.putBoolean("isRemember",false);
34.                         edit.apply();
35.                     }
36. Intent intent = new Intent(LoginActivity.this,FragmentMain.class);
37.                     startActivity(intent);
38.                 }else{
39.                     Toast.makeText(LoginActivity.this,"账号或密码错误!",Toast.LENGTH_LONG).show();
40.                 }
41.             }
42.         });
43.         toReg = findViewById(R.id.toReg);
44.         toReg.setOnClickListener(new View.OnClickListener() {
45. @Override
46. public void onClick(View view) {
47. Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);
48.                 startActivity(intent);
49.             }
50.         });
51.     }
52. private void initView(){
53.         btnLogin = findViewById(R.id.btn_login);
54.         etAccount = findViewById(R.id.et_account);
55.         etPassword = findViewById(R.id.et_password);
56.         mySQLiteOpenHelper = new MySQLiteOpenHelper(this);
57.         cb_Remember = findViewById(R.id.cb_Remember);
58.     }
59. //    记住密码初始化功能
60. private void initData(){
61. SharedPreferences spf = getSharedPreferences("spfRecorid",MODE_PRIVATE);
62. boolean isRem = spf.getBoolean("isRemember",false);
63. String account = spf.getString("account","");
64. String password = spf.getString("password","");
65. if(isRem){
66.             etAccount.setText(account);
67.             etPassword.setText(password);
68.             cb_Remember.setChecked(true);
69.         }
70.     }
71. }

3.1.2 用户注册功能:如果用户没有访问该系统的权限,可以通过注册功能注册用户账号密码,用户通过输入需要注册的账号密码并点击同意协议便可完成注册,注册成功后跳转登陆页面。若用户有账号和密码可以点击“已有账号”跳转登录页面进行登录。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
12月前
|
Android开发 数据安全/隐私保护 开发者
Android自定义view之模仿登录界面文本输入框(华为云APP)
本文介绍了一款自定义输入框的实现,包含静态效果、hint值浮动动画及功能扩展。通过组合多个控件完成界面布局,使用TranslateAnimation与AlphaAnimation实现hint文字上下浮动效果,支持密码加密解密显示、去除键盘回车空格输入、光标定位等功能。代码基于Android平台,提供完整源码与attrs配置,方便复用与定制。希望对开发者有所帮助。
238 0
|
8月前
|
缓存 Unix Android开发
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
893 8
|
8月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
756 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
8月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1006 6
|
7月前
|
人工智能 小程序 搜索推荐
【一步步开发AI运动APP】十二、自定义扩展新运动项目2
本文介绍如何基于uni-app运动识别插件实现“双手并举”自定义扩展运动,涵盖动作拆解、姿态检测规则构建及运动分析器代码实现,助力开发者打造个性化AI运动APP。
|
8月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
705 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
10月前
|
人工智能 小程序 前端开发
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
571 0
小程序、网站 vs. APP:成本差异究竟在哪里?技术栈如何决定项目上限?优雅草卓伊凡
|
10月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
1198 4
|
数据采集 JSON 网络安全
移动端数据抓取:Android App的TLS流量解密方案
本文介绍了一种通过TLS流量解密技术抓取知乎App热榜数据的方法。利用Charles Proxy解密HTTPS流量,分析App与服务器通信内容;结合Python Requests库模拟请求,配置特定请求头以绕过反爬机制。同时使用代理IP隐藏真实IP地址,确保抓取稳定。最终成功提取热榜标题、内容简介、链接等信息,为分析热点话题和用户趋势提供数据支持。此方法也可应用于其他Android App的数据采集,但需注意选择可靠的代理服务。
548 11
移动端数据抓取:Android App的TLS流量解密方案

热门文章

最新文章