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

移动平台开放综合实践

1.实验内容

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

2.实验过程

2.1 确定基础功能

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

2.2 设计UI界面

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

2.3 编写程序运行代码

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

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

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

3. 代码分析

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

java 复制代码
@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() {
        @Override
        public void onClick(View v) {
            redTeamScore++;
            updateScores();
            saveScores();
        }
    });

    blueTeamButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            blueTeamScore++;
            updateScores();
            saveScores();
        }
    });

    resetButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            redTeamScore = 0;
            blueTeamScore = 0;
            updateScores();
            saveScores();
        }
    });

    redTeamUndoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (redTeamScore > 0) {
                redTeamScore--;
                updateScores();
                saveScores();
            }
        }
    });

    blueTeamUndoButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (blueTeamScore > 0) {
                blueTeamScore--;
                updateScores();
                saveScores();
            }
        }
    });
}

3.2 比分更新模块

java 复制代码
private void updateScores() {
    redTeamScoreTextView.setText(String.valueOf(redTeamScore));
    blueTeamScoreTextView.setText(String.valueOf(blueTeamScore));
}

3.3 比分存储模块

java 复制代码
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下载和添加依赖

相关推荐
一行•坚书5 分钟前
kafka服务端与客户端如何协作?生产者发送消息分区策略是什么?消费者组分区策略?集群与ACK机制?
java·后端·kafka
serve the people20 分钟前
Prompt Composition with LangChain’s PipelinePromptTemplate
java·langchain·prompt
天天摸鱼的java工程师21 分钟前
干掉系统卡顿!Excel异步导出完整实战方案(百万数据也不慌)
java·后端
心随雨下30 分钟前
Java中将System.out内容写入Tomcat日志
java·开发语言·tomcat
-指短琴长-1 小时前
ProtoBuf速成【基于C++讲解】
android·java·c++
Cx330❀1 小时前
《C++ 搜索二叉树》深入理解 C++ 搜索二叉树:特性、实现与应用
java·开发语言·数据结构·c++·算法·面试
爱吃烤鸡翅的酸菜鱼1 小时前
深度解析《AI+Java编程入门》:一本为零基础重构的Java学习路径
java·人工智能·后端·ai
SimonKing1 小时前
被卖的Hutool出AI模块了!它如何让Java调用大模型变得如此简单?
java·后端·程序员
不穿格子的程序员2 小时前
从零开始刷算法-栈-字符串解码
java·开发语言
你不是我我2 小时前
【Java 开发日记】设计模式了解吗,知道什么是饿汉式和懒汉式吗?
android·java·开发语言