思路:根据用户选择的每道题的选项,进行判断用户性格颜色所占的比例,比例最大的性格色彩即为要返回的结果。而判断用户性格颜色所占的比例的方法也很简单,因为没到性格测试题的选项都是从A-D按照“红”、“蓝”、“黄”、“绿”的顺序进行排列的。

对于存储用户的答案来说,有两种方式,一种是建立本地文件;一种是使用动态数组的方式,把结果直接存在内存中。

我这里选择的是把结果直接存在内存中,然后读取出来计算结果。使用的数组是HashMap,因为对于一道题,也就是一个惟一的题目ID,用户可能会反复修改答案,所以HashMap提供的键值对特性,

put()方法自动用新值替换与指定关键字相关联的原先值,就很好地解决了问题。

但是在使用的过程中,遇到了很严重的错误:空指针异常。

问题出在了HashMap数组的下标初始值是1,而不是0.

性格色彩测试2.0没有实现上下翻页的优化,在3.0中除去了上翻页的按钮。

为了保证测试的准确性,就需要引导用户在读完题目后最好就能做出选择,选择自己第一反应出来的答案,而且一旦选中不能更改。当用户下翻页时,若没有选择某一选项则给予提示,只有用户选中了某一项后,才能跳转到下一页。另外,只有到翻页到最后一题时,并且选择了答案后,才显示测试结果。

在开发3.0版的过程中,遇到一个BUG,当显示测试界面后,点击第一题的答案后,虽然可以实现向下一题的跳转,但是直接从第一题调转到了最后一题。    错误的原因在于:每次点击任何一个单选按钮都会触发事件,如果代码写成如下图

所示的话

,产生的事件即便不是由对应的按钮产生的,也会处触发黄色区域的代码执行。而事实上,每当点击一个单选按钮时,除了翻页外,翻页的事件本身又会触发一个新的事件,因而又会导致黄色区域代码的执行。这样就成了一个循环直至执行到currentNum的值为试题总数结束。

解决的办法就是:保证在触发了特定的事件后才执行黄色区域的代码,也就是把那部分代码分四份分别放在if语句的执行体中。

代码:

package logan.lejia;

import java.util.HashMap;

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.widget.RadioButton;

import android.widget.RadioGroup;

import android.widget.TextView;

import android.widget.Toast;

public class TestingView extends Activity {

private TextView textview_title;// 题目的标题

private TextView textview;// 显示当前题号和共有多少题目信息

private RadioButton buttonFir, buttonSec, buttonThir, buttonFour;

private RadioGroup radioGroup = null;

private final int version = 1;

private static int currentNum = 1;

SQLiteHelper helper = new SQLiteHelper(TestingView.this, "lejia", null,

version);

// 用于存放用户所选测试题选项

private static HashMap hash = new HashMap();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.setContentView(R.layout.answview);

// 试题的题干

textview_title = (TextView) findViewById(R.id.textView_problems_title);

// 单选按钮和按钮组

buttonFir = (RadioButton) findViewById(R.id.radioButton1);

buttonSec = (RadioButton) findViewById(R.id.radioButton2);

buttonThir = (RadioButton) findViewById(R.id.radioButton3);

buttonFour = (RadioButton) findViewById(R.id.radioButton4);

radioGroup = (RadioGroup) findViewById(R.id.ButtonGroup);

// 两个按钮中间的textView

textview = (TextView) findViewById(R.id.textView_bottomView);

textview.setTextSize(15);

radioGroup

.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(RadioGroup group, int checkedId) {

if (checkedId == buttonFir.getId()) {

hash.put(currentNum + "", 1);// 存信息

if (currentNum != 10) {

turnToNextPage();

} else if (currentNum == 10) {

// 用户答题完毕,显示测试结果

calculateResult();

}

} else if (checkedId == buttonSec.getId()) {

hash.put(currentNum + "", 2);

if (currentNum != 10) {

turnToNextPage();

} else if (currentNum == 10) {

// 用户答题完毕,显示测试结果

calculateResult();

}

} else if (checkedId == buttonThir.getId()) {

hash.put(currentNum + "", 3);

if (currentNum != 10) {

turnToNextPage();

} else if (currentNum == 10) {

// 用户答题完毕,显示测试结果

calculateResult();

}

} else if (checkedId == buttonFour.getId()) {

hash.put(currentNum + "", 4);

if (currentNum != 10) {

turnToNextPage();

} else if (currentNum == 10) {

// 用户答题完毕,显示测试结果

calculateResult();

}

}

System.out.println("onCheckedChanged:" + currentNum);

}

});

// 刚进入界面时,要显示第一题的信息

displayPorblems(currentNum);

}

/**

* 显示测试题信息,需要传入当前的试题号

*

* @param currentNum

*/

private void displayPorblems(int currentNum) {

// 获取可以进行增删改查的数据库实例

SQLiteDatabase database = helper.getWritableDatabase();

Cursor cursor = database.query("test", new String[] { "id", "title",

"first", "second", "third", "fourth" }, "id=?",

new String[] { currentNum + "" }, null, null, null);

cursor.moveToFirst();

// 共有6列,标号从0-5

String title = cursor.getString(1);// 题干

String first = cursor.getString(2);// 选项A

String second = cursor.getString(3);// 选项B

String third = cursor.getString(4);// 选项C

String fourth = cursor.getString(5);// 选项D

cursor.close();

database.close();

textview_title.setText(title);

buttonFir.setText(first);

buttonSec.setText(second);

buttonThir.setText(third);

buttonFour.setText(fourth);

textview.setText("第" + currentNum + "题/共有" + "10" + "题");

}

private void calculateResult() {

int red = 0;

int blue = 0;

int yellow = 0;

int green = 0;

System.out.println(hash.size());

for (int i = 1; i <= hash.size(); i++) {

int selectedItem = hash.get(i + "");

if (selectedItem == 1) {

red = red + 1;

} else if (selectedItem == 2) {

blue = blue + 1;

} else if (selectedItem == 3) {

yellow = yellow + 1;

} else if (selectedItem == 4) {

green = green + 1;

}

}

Intent intent = new Intent();

if (red >= blue) {

if (red >= yellow) {

if (red >= green) {

intent.setClass(TestingView.this, ActivityRed.class);

this.finish();

} else {

intent.setClass(TestingView.this, ActivityGreen.class);

this.finish();

}

} else {

if (yellow >= green) {

intent.setClass(TestingView.this, ActivityYellow.class);

this.finish();

} else {

intent.setClass(TestingView.this, ActivityGreen.class);

this.finish();

}

}

} else {

if (blue >= yellow) {

if (blue >= green) {

intent.setClass(TestingView.this, ActivityBlue.class);

this.finish();

} else {

intent.setClass(TestingView.this, ActivityYellow.class);

this.finish();

}

} else {

if (yellow >= green) {

intent.setClass(TestingView.this, ActivityYellow.class);

this.finish();

} else {

intent.setClass(TestingView.this, ActivityGreen.class);

this.finish();

}

}

}

startActivity(intent);

}

private void turnToNextPage() {

// 下翻页

// 自加

currentNum = currentNum + 1;

System.out.println("turnToNextPage()" + currentNum);

// 刷新测试题

this.displayPorblems(currentNum);

radioGroup.clearCheck();

}

} 答题完毕后效果图:

android开发系列之性格测试,性格色彩测试android程序开发之十--输出结果相关推荐

  1. Silverlight for Windows Phone 7开发系列(2):第一个Silverlight程序

    前言 上一篇讲述了Windows Phone 7开发环境的搭建,这篇文章讲述如何创建,部署,调试以及运行Silverlight for Windows Phone应用程序,同时介绍如何Microsof ...

  2. 十次方项目开发系列【8】:对评论点赞功能开发 Redis的配置和使用

    使用对评论点赞和取消点赞功能开发 一 评论点赞功能开发 1.1 先根据评论的id查询,再对点赞数加一 1.1.1 在CommentController添加方法 1.1.2 在CommentServic ...

  3. Excel 二次开发系列(3): 创建Excel二次开发环境

    Excel 二次开发系列 前面我们讲到了 Excel编程模型及Excel 常用操作方法,在这一节,我说一下基础的怎么创建一个Excel应用级的二次开发程序. 在微软的这个基础网站里面可以找到很多的有用 ...

  4. 显示器色彩精度测试软件,色彩测试篇:色彩还原准确度测试_SANC E7 PRO_液晶显示器评测-中关村在线...

    下面我们进入色彩测试环节,分别有色彩还原准确度测试.色域覆盖度测试.色温一致性测试.色度均匀性测试.亮度均匀性测试.伽马曲线测试.然后我们通过这些测试来看看,这款显示器在色彩显示方面的性能如何. 环节 ...

  5. 【Android 教程系列第 25 篇】如何使用 Android Studio 生成 keystore 签名文件

    这是[Android 教程系列第 25 篇],如果觉得有用的话,欢迎关注专栏. Android Studio 版本:Arctic Fox 2020.3.1 Pathc 3,这里我新建了一个安卓项目,剩 ...

  6. 【移动应用开发】2022/2023 年 8 大移动应用程序开发趋势

    迄今为止,技术进步见证了超过 500 万个应用程序的开发.在全球范围内,应用程序开发市场很火爆,预计未来几年将继续火爆. 到 2022 年,预计会更大.更快,总体上会带来向应用程序的巨大转变.让我们分 ...

  7. 【Qt+OpenCV项目开发学习】二、图片查看器应用程序开发

    一.前言 本博客将讲解如何用Qt+OpenCV开发一款图片查看器的Windows应用程序,其实不用OpenCV也能开发出这类软件,作者目的是为了学习Qt+OpenCV开发项目,所以会使用OpenCV, ...

  8. python程序开发模块化_python-17-Python文件两种用途、模块化程序开发

    --------------------------------python文件的两种用途---------------------------------- py文件的两种用途: 1.直接运行 pr ...

  9. python炒股软件开发_Python之路day03-习题+作业-股票查询程序开发

    女神博客链接:https://www.cnblogs.com/Eva-J/articles/11214642.html#_label16 练习题 1.任一个英文的纯文本文件,统计其中的每个单词出现的个 ...

  10. 音视频开发系列(26)三种方式绘制图片-android开发

    在android开发中我们最常使用的绘制图片的方式就是ImageView,设置src.那么有没有其他方案可以实现图片的绘制呐? 三种方案 通过Imageview设置setImageBitmap fin ...

最新文章

  1. jq修改iframe html代码,jQuery控制iFrame(实例代码)
  2. android自定义吐司通知,IOS 仿Android吐司提示框的实例(分享)
  3. YOLO3实现目标检测(VS2015+OPENCV3.4.2+YOLO3+CUDA10.0+CUDNN7.5)
  4. CSDN官方发布的《180道Python面试题,助你一举通过面试》浅析一
  5. Swift之深入解析如何避免单元测试中的强制解析
  6. 1.1 算法编译与调试
  7. html层次选择器例题,详解强大的jQuery选择器之基本选择器、层次选择器
  8. POI SXSSFWorkbook 实现大批量数据 导出
  9. C# 通过接口IEnumerator让自己编写的对象/类,实现foreach遍历方法
  10. android 自定义课程表,Android课程表界面布局实现代码
  11. 【原创】运维基础之keepalived
  12. 哈夫曼编码+python实现
  13. 【转】英文版XP不能安装中文版软件
  14. 网络规划设计师的参考资料和复习书籍
  15. 如何调用WebService
  16. Bypassing Stack Cookies, SafeSeh, SEHOP, HW DEP and ASLR
  17. ExtJS界面设计工具 Ext Designer
  18. 网络历史之金融投资三剑客01
  19. php上传pdf文件错误,php上传pdf文件,一些特殊字符丢失
  20. Android Studio 学习记录-图形定制

热门文章

  1. CentOS 7系统安装Ghost
  2. 乌克兰证券委员会主席支持认可加密货币作为金融工具的合法地位
  3. 洒脱喜详解Layer 2:以太坊L2将是多rollup并存的局面,跨链领域值得探索
  4. Linux关机重启命令说明
  5. 计算机网络access code,access code
  6. brio与BO及Cognos的比较
  7. 昨晚我遇到了超级网红 区块链本人
  8. 深大uooc学术道德与学术规范教育第九章
  9. 周志华-机器学习(线性模型)
  10. 最最常用的26条Linus命令整理