0

0

Android Quiz App开发:解决用户自定义问题数量循环问题

DDD

DDD

发布时间:2025-11-16 11:43:01

|

993人浏览过

|

来源于php中文网

原创

android quiz app开发:解决用户自定义问题数量循环问题

本文旨在解决Android Quiz App开发中,用户自定义问题数量时循环无法达到预期次数的问题。通过分析问题代码,提供简化后的解决方案,确保循环能够按照用户设定的数量执行,并成功存储问题和答案,最后跳转到答题页面。

问题分析

原始代码中,循环逻辑存在一些问题,导致无法按照用户设定的问题数量进行循环。主要问题在于:

  1. 循环条件错误: for (int i = 1; i < amounts; i++) 导致循环次数比用户设定的数量少一次。
  2. i == amounts 判断永远为 false: 由于循环条件是 i < amounts,因此 i 永远不会等于 amounts,导致跳转页面的逻辑永远不会执行。
  3. Intent 的启动时机错误: Intent 应该在循环结束后启动,而不是在循环内部的某个特定条件满足时启动。

解决方案

以下是修改后的 logicg() 方法,它解决了上述问题,并简化了代码:

private void logicg() {
    String mount = jshared.getString("amount", "");
    int amounts = Integer.parseInt(mount);

    for (int i = 0; i < amounts; i++) {
        map = new HashMap<>();
        map.put("answer", Objects.requireNonNull(ans.getText()).toString());
        map.put("question", inop.getText().toString());
        jshared2.edit().putString("data", new Gson().toJson(map)).apply(); // 使用 apply 异步提交
    }

    Intent intent = new Intent(question.this, answerscrn.class);
    startActivity(intent);
}

代码解释:

天工大模型
天工大模型

中国首个对标ChatGPT的双千亿级大语言模型

下载
  1. 循环条件修改: for (int i = 0; i < amounts; i++) 将循环起始值改为 0,循环条件改为 i < amounts,确保循环执行 amounts 次。
  2. 移除不必要的判断: 移除了 if (i == amounts) 判断,因为跳转页面的逻辑应该在循环结束后执行。
  3. 异步提交: 使用 apply() 方法代替 commit() 方法,异步提交数据到 SharedPreferences,避免阻塞主线程。

注意事项:

  • 确保 ans.getText() 和 inop.getText() 不为空,否则可能会导致 NullPointerException。可以使用 TextUtils.isEmpty() 方法进行判断,或者在UI上进行强制输入。
  • SharedPreferences 适合存储少量数据,如果需要存储大量问题和答案,建议使用数据库。
  • 建议使用 apply() 方法代替 commit() 方法,异步提交数据到 SharedPreferences,避免阻塞主线程。commit() 是同步操作,可能会导致UI卡顿。
  • 在循环内部创建 HashMap 可能会导致内存占用过高,如果问题数量非常大,可以考虑在循环外部创建 HashMap,并在每次循环时清空。

完整示例代码:

package com.prgr.quizards.canary;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.widget.AppCompatButton;

import com.google.android.material.textfield.TextInputEditText;
import com.google.gson.Gson;

import java.util.HashMap;
import java.util.Objects;

public class question extends Activity {

    private HashMap<String, Object> map = new HashMap<>();
    private TextView text;
    private EditText inop;
    private TextInputEditText ans;
    private AppCompatButton btn;
    private SharedPreferences jshared2;

    private SharedPreferences jshared;

    @Override
    protected void onCreate(Bundle _savedInstanceState) {
        super.onCreate(_savedInstanceState);
        setContentView(R.layout.activity_question);
        initializedata();
        AppCompatButton btn2 = findViewById(R.id.button3);
        btn = findViewById(R.id.button);
        btn2.setOnClickListener(v -> gotoback());
        btn.setOnClickListener(view -> logicg());

    }
    public void gotoback(){
        Intent intent = new Intent(question.this, activity_home_screen.class);
        startActivity(intent);
    }

    private void initializedata(){
        jshared = getSharedPreferences("j", Activity.MODE_PRIVATE);
        jshared2 = getSharedPreferences("j2", Activity.MODE_PRIVATE);
        inop = findViewById(R.id.inop);
        ans = findViewById(R.id.ans);
        text = findViewById(R.id.text1);
    }
    private void logicg() {
        String mount = jshared.getString("amount", "");
        int amounts = Integer.parseInt(mount);

        for (int i = 0; i < amounts; i++) {
            String question = inop.getText().toString();
            String answer = Objects.requireNonNull(ans.getText()).toString();

            if (TextUtils.isEmpty(question) || TextUtils.isEmpty(answer)) {
                Toast.makeText(getApplicationContext(), "Question or Answer cannot be empty", Toast.LENGTH_SHORT).show();
                return; // 停止执行,提示用户输入
            }

            map = new HashMap<>();
            map.put("answer", answer);
            map.put("question", question);
            jshared2.edit().putString("data", new Gson().toJson(map)).apply();
        }

        Intent intent = new Intent(question.this, answerscrn.class);
        startActivity(intent);
    }
}

总结

通过修改循环条件,移除不必要的判断,并使用 apply() 方法异步提交数据,可以解决Android Quiz App开发中用户自定义问题数量时循环无法达到预期次数的问题。同时,需要注意输入校验和数据存储方式的选择,以确保程序的稳定性和性能。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1030

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

612

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

334

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

235

2025.08.29

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

765

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

765

2023.08.10

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

385

2023.06.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.4万人学习

C# 教程
C# 教程

共94课时 | 11.2万人学习

Java 教程
Java 教程

共578课时 | 81.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号