20212416 2023-2024-2 《移动平台开发与实践》综合实践

移动平台开放综合实践

  • 1.实验内容
  • 2.实验过程
    • 2.1 确定基础功能
    • 2.2 设计UI界面
    • 2.3 编写程序运行代码
    • 2.4 在基本功能的基础上丰富功能
  • 3. 代码分析
    • 3.1设置按钮的点击事件监听器
    • 3.2 比分更新模块
    • 3.3 比分存储模块
  • 4. 运行结果
  • 5.实践中遇到的问题及解决
  • 6.学习感悟与思考
  • 参考资料

1.实验内容

  • 因为我是排球场常客,打比赛时记分常常会出现这样一些问题,微信小程序方便但是疯狂弹广告,稍不留神就跳转拼多多淘宝;想连着记几局却要求你看一个28秒的广告,又一个52秒的广告,越看越长。用纸质记分牌吧,损耗严重,据已知数据,蓝队的0、1、9分的分值纸已经摇摇欲坠,红队的"2"更是不知所踪,奈何经费紧张,队服都得省吃俭用买别说频繁地添置新的纸质记分牌了。所以,借着这次机会,俺老宁挺身而出,自己设计了一款简单的记分app。

2.实验过程

2.1 确定基础功能

  • 我希望这个app首先具有“记分”这一基本功能;其次,要实现复用,还得能够重置比赛的分数;最后,如果点错了(给队伍加错分了),还需要有撤销的功能。

2.2 设计UI界面

  • 根据上述功能,能够确定下来的有“加分”按钮,“撤销”按钮,“重置”按钮,还需要有用来显示两队分数的分数板块。
  • 为了更美观也更符合主题一些,我们还可以找一张好看的背景图,再调整一下透明度。
  • 最后效果如下:
    在这里插入图片描述

2.3 编写程序运行代码

  • 代码其实主要分为三个模块,一个是设置按钮的点击事件监听器,一个是比分更新模块,还有就是比分存储模块。详见下面的代码分析。

2.4 在基本功能的基础上丰富功能

  • 我的设想是增加一个图表,能够根据实时得分情况更新,从而能直观地看到两支队伍在什么时间得分,或者说在哪个阶段集中得分,从而反映比赛场上的分数走势以及队员的状态变化等。
  • 但是我遇到了一个问题,图表是实时更新的,也就是说我每点击一次加分按钮,图表都要全部更新一次,那我之前的数据点如何体现在新的图表中?存储在什么地方能够保证它能够一直保存呢?
  • 这个我一直没有找到好的解决办法,导致做出来的图表会在更新分数后被新的分数覆盖,所以现在的代码里没有这个功能,如果找到了好的解决办法我就回来删掉这段话。

3. 代码分析

3.1设置按钮的点击事件监听器

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);redTeamScoreTextView = findViewById(R.id.red_team_score);blueTeamScoreTextView = findViewById(R.id.blue_team_score);redTeamButton = findViewById(R.id.red_team_button);blueTeamButton = findViewById(R.id.blue_team_button);resetButton = findViewById(R.id.reset_button);redTeamUndoButton = findViewById(R.id.red_team_undo_button);blueTeamUndoButton = findViewById(R.id.blue_team_undo_button);sharedPreferences = getSharedPreferences("ScorePreferences", Context.MODE_PRIVATE);redTeamScore = sharedPreferences.getInt("redTeamScore", 0);blueTeamScore = sharedPreferences.getInt("blueTeamScore", 0);updateScores();redTeamButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {redTeamScore++;updateScores();saveScores();}});blueTeamButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {blueTeamScore++;updateScores();saveScores();}});resetButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {redTeamScore = 0;blueTeamScore = 0;updateScores();saveScores();}});redTeamUndoButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (redTeamScore > 0) {redTeamScore--;updateScores();saveScores();}}});blueTeamUndoButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (blueTeamScore > 0) {blueTeamScore--;updateScores();saveScores();}}});
}

3.2 比分更新模块

private void updateScores() {redTeamScoreTextView.setText(String.valueOf(redTeamScore));blueTeamScoreTextView.setText(String.valueOf(blueTeamScore));
}

3.3 比分存储模块

private void saveScores() {SharedPreferences.Editor editor = sharedPreferences.edit();editor.putInt("redTeamScore", redTeamScore);editor.putInt("blueTeamScore", blueTeamScore);editor.apply();
}

4. 运行结果

排球比赛记分牌

5.实践中遇到的问题及解决

  • 问题1:图表如何实现
  • 问题1解决方案:仅靠java代码实现可能做出来的界面不会太漂亮,我们选择导入MPAndroidChart库
  • 问题2:无法通过设置dependencies线上下载GitHub上的MPAndroidChart库,总是会报语法错,但是语法我都让gpt检查过了是没问题的,可能是我的AS不支持这样添加依赖的方法。
  • 问题2解决方案:呕心沥血寻找MPAndroidChart库的jar包

6.学习感悟与思考

  • 这次综合实践其实让我有些挫败,因为一开始就是奔着做一个自己感兴趣的软件开始的,基本功能的实现很简单。而附加的实时化图表功能,捣鼓了很久都没弄出来,加上紧张的期末,真让人胸中郁结。我的主要精力都花在怎么实现附加功能,最后却没个结果,竹篮打水一场空,真挺叫人难过的。不过好在基础功能实现了,以后排球队都要记住我的名字哈哈。

参考资料

MPAndroidChart下载和添加依赖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原创】springboot+mysql员工工资管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

Wilcom PE 威尔克姆绣花软件下载安装;Wilcom PE 广大绣花制版师必备软件!

Wilcom PE这款软件不仅具备强大的设计功能,更在用户体验上下足了功夫,使得刺绣图案的创作变得更为简单、高效。 在Wilcom PE的丰富工具箱中,用户可以发现各种精心设计的工具,它们如同刺绣师手中的魔法棒,将创意变为现…

云邮件推送服务如何配置?有哪些优势特点?

云邮件推送的性能怎么优化?如何选择邮件推送服务? 云邮件推送服务是一种基于云计算的邮件发送解决方案,能够帮助企业和个人高效地发送大规模邮件。AokSend将详细介绍如何配置云邮件推送服务,以便你能够充分利用其优势。 云邮件推…

深度学习500问——Chapter12:网络搭建及训练(3)

文章目录 12.3.5 Caffe有哪些接口 12.4 网络搭建有什么原则 12.4.1 新手原则 12.4.2 深度优先原则 12.4.3 卷积核size一般为奇数 12.4.4 卷积核不是越大越好 12.5 有哪些经典的网络模型值得我们去学习的 12.6 网络训练有哪些技巧 12.6.1 合适的数据集 12.6.2 合适的预…

VMware连接XShell保姆教程

打开虚拟机后进入终端在终端中 1.配置静态IP 在终端中输入 ifconfig回车, 注意这里需要记住这个IP每个电脑的都不一样 在输入ip addr 2.接着输入cd /etc/sysconfig/network-scripts/进入配置网络文件夹 3.通过Vim编辑器编辑内容 vim ifconfig-ens33 进入界面…

《窄门》情不知所起,而一往情深

《窄门》情不知所起,而一往情深 安德烈纪德(1869-1951),法国作家。纪德一生著有小说、剧本、论文、散文、日记、书信多种,主要作品有小说《背德者》《窄门》《田园交响曲》《伪币制造者》等,戏剧《康多尔王…

信息学奥赛初赛天天练-31-CSP-J2022基础题-指针、数组、链表、进制转换、深度优先搜索、广度优先搜索、双栈实现队列应用

PDF文档公众号回复关键字:20240621 2022 CSP-J 选择题 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 3.运行以下代码片段的行为是 ( ) int x 101; int y 201; int * p &x; int * q &y;…

C51与MDK共存版本安装教程

目录 一、安装准备 1.1 新建文件夹 1.2 网盘链接-加Q 667198390 二、 双版本共存安装教程 2.1 安装Keil5 C51 2.2 安装Keil5 MDK 2.3 C51和MDK的共存 2.4 生成许可证 2.5 安装STM32Pack包 一、安装准备 1.1 新建文件夹 如下图: 在合适的网盘里&#xff08…

Java热部署:让应用更新如丝般顺滑,告别繁琐重启!

目录 手动启动热部署 自动启动热部署 参与热部署监控的文件范围配置 关闭热部署 什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍&…

全网首测!文生软件平台码上飞CodeFlying,效果炸裂!

前言: 提到AIGC,在大家的印象中应该就是让AI自己生成文字,图片等内容吧。随着今年Sora,Suno的爆火,将AIGC的应用场景又拉到了一个新的高度,为人们带来了更多的遐想。在未来,或许可以用AI来生成…

python学习笔记-10

面向对象编程-下 1.私有化属性 语法:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。 使用私有化属性的场景: 1.把特定的一个属性隐藏起来,不让类的外部进行直接调用。 2.不让属性的值随意改变。…

微信发布分班查询结果

亲爱的老师们!期末考完,新学期就快要来了,还在为分班查询头疼吗?别担心,今天我要和大家分享一个超级实用的小技巧——如何通过微信发布分班查询结果,让家长们和学生们都能掌握新学期的动态? 分…

【C语言】16.动态内存管理

文章目录 1.为什么要有动态内存分配2.malloc和free2.1 malloc2.2 free 3.calloc和realloc3.1 calloc3.2 realloc 4.常见的动态内存的错误4.1 对NULL指针的解引⽤操作4.2 对动态开辟空间的越界访问4.3 对⾮动态开辟内存使⽤free释放4.4 使⽤free释放⼀块动态开辟内存的⼀部分4.5…

初识 GPT-4 和 ChatGPT

文章目录 LLM 概述理解 Transformer 架构及其在 LLM 中的作用解密 GPT 模型的标记化和预测步骤 想象这样⼀个世界:在这个世界里,你可以像和朋友聊天⼀样快速地与计算机交互。那会是怎样的体验?你可以创造出什么样的应用程序?这正是…

【PS】提取手写签名

准备工具: 纸张:用于承载签名; 笔:用于签名; 手机:用于拍摄签名; Adobe Photoshop 版本: 12.0.3 (12.0.3x20101211 [20101211.r.1222 2010/12/11:02:00:00 cutoff; r branch]) x32:用…

亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗?

亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗? 今天亚足联官方宣布了世预赛18强赛分组抽签仪式时间,本次抽签仪式将于6月27日15点在马来西亚吉隆坡举行。除了抽签时间之外,足联还…

IMU用于飞行坐姿校正

为了提升长途飞行的舒适度并预防乘客因不良坐姿导致的身体不适,来自荷兰上海两所大学的研究团队携手开发出一种创新的“舒适穿戴”设备,专为识别飞行中的坐姿设计。 研究团队制作了两种原型设备:一种追求极致舒适,另一种为紧身设…

FFmpeg源码:AV_RB32宏定义分析

一、AV_RB32宏定义的作用 AV_RB32是FFmpeg源码中经常出现的一个宏,其定义如下: #ifndef AV_RB32 # define AV_RB32(p) AV_RB(32, p) #endif 该宏定义有多层。把它简化为函数,其函数声明可以等价于: uint32_t AV_RB32(uint…

windows下 nodejs升级版本

使用n升级node,需要安装git或安装linux支撑组件,后来在网上找资料 直接下载node.exe覆盖原文件即可。 升级步骤如下: 1.查看当前node版本 node -v 2.下载相应版本的nodejs,网址是nodejs下载,找个你想要的版本下载node.exe 3.找到你node的安装…

在C#中对 JSON进行序列化和反序列化处理

概述:在现代软件开发领域,不同系统和平台之间的数据交换是不可或缺的方面。JSON(JavaScript 对象表示法)因其轻量级、人类可读和易于解析的特性而成为一种无处不在的数据格式。使用 C# 🚀编程的 JSON 序列化和反序列化…