计算Android上测验的分数

时间:2012-10-15 09:54:06

标签: android android-activity sharedpreferences

我正在进行quiz,因为我有3项活动Question1Question2Question3,每项活动有4个可能的答案(按钮),仅一个按钮是正确的。我必须在测验结束时计算并显示用户的分数。

我做了一些研究,SHAREDPREFERENECES似乎是解决方案。但我不知道如何使用它可以任何人帮助请。 Question1.java代码如下:假设btnAnswer1a是正确的答案,如何保存数据,然后在最后一个活动的textview中显示。

 Button Answer1, Answer2, Answer3, Answer4;
 public static final String PREFS_NAME = "MyPrefsFile";
 static SharedPreferences settings;
 SharedPreferences.Editor editor;
 int ScoreCount;

 @Override
 public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.answer1);

  settings = getSharedPreferences(PREFS_NAME, 0);
  editor = settings.edit();

  ScoreCount = settings.getInt("ScoreCount", 10);

   Answer1 = (Button) findViewById(R.id.btnAnswer1a);
   Answer2 = (Button) findViewById(R.id.btnAnswer1b);
   Answer3 = (Button) findViewById(R.id.btnAnswer1c);
   Answer4 = (Button) findViewById(R.id.btnAnswer1d);

   Answer1.setOnClickListener(this);
   Answer2.setOnClickListener(this);
   Answer3.setOnClickListener(this);
   Answer4.setOnClickListener(this);

         }

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub
switch (arg0.getId()) {


    case R.id.btnAnswer1a:
          Intent Screen1 = new Intent(Answer1.this, Color2.class); 
          Answer1.this.startActivity(Screen1); 
          editor.putInt("ScoreCount", 6);
          editor.commit();
        break;


case R.id.btnAnswer1b:
      Intent Screen = new Intent(Answer1.this, Color2.class); 
    Answer1.this.startActivity(Screen);  
    break;

case R.id.btnAnswer1c:
      Intent Screen3 = new Intent(Answer1.this, Color2.class); 
    Answer1.this.startActivity(Screen3);  
    break;

case R.id.btnAnswer1d:
    Intent Screen2 = new Intent(Answer1.this, Color2.class); 
    Answer1.this.startActivity(Screen2);  
   break;


}

3 个答案:

答案 0 :(得分:1)

我认为如果你通过go in intent传递信息会更好。你可以这样做:

Intent i = new Intent("com.yourPackage.yourActivity");
i.putExtra("keyForExtra", _ID);
startActivity(i);

和onCreate结果活动

String data = getIntent().getStringExtra("keyForExtra");

您可以将此字符串解析为整数或任何您想要的字符。

但是,如果您要使用共享首选项,那么,写作:

SharedPreferences settings = getSharedPreferences(YOUR_CUSTOM_PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("myScore", yourScore); // you can put a lot of thngs there. 
editor.commit();

要了解您可以放置​​的其他内容,请查看here

SharedPreferences settings = getSharedPreferences(YOUR_CUSTOM_PREFS_NAME, 0);
int currentScore = settings.getInt("myScore", defaultValue);

有关共享首选项的详细存储文档,请查看here

答案 1 :(得分:0)

如果您想向SharedPreferences写一些内容,请使用此

SharedPreferences sharedPreferences = getSharedPreferences("your_name_of_shared_preferences", 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.putInt("result", resultValue);
editor.commit();

要从他们那里读到一些东西,就这样做吧

SharedPreferences sharedPreferences = getSharedPreferences("your_name_of_shared_preferences", 0);
int result = sharedPreferences.getInt("result", defaultValue);

resultValue是你的测验结果,当你没有向该键下的sharedPreferences写任何东西时,需要使用defaultValue。

答案 2 :(得分:0)

您是否有特殊原因要求针对每个问题进行不同的活动?对我来说这似乎效率很低(冗余代码,容易出错,内存明智)。您可以将所有问题和答案存储在数组中,并使用整数跟踪当前问题和分数。当问题得到解答时,请检查答案,更新分数,增加当前问题,获取新问题和答案,并将其设置为问题文本字段和按钮标签。没有必要以这种方式传递分数,因为一切都在一项活动中。