2012-10-15 34 views
1

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

我已经做了一些研究,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; 


} 

回答

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是必要的情况下默认值。

+0

当用户回答您的测验问题时,您将值写入sharedPreferences(代码的第一部分)。 S在你的情况下在每一个活动。当你想显示结果时,你从sharedPreferences获得值,所以我想在最后的活动。 – Agata

1

我认为这将是更好,如果你通过与意图去的信息。你可以这样做:

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

,你可以

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

您可以分析该字符串为整数或任何你觉得自己得到的活动的onCreate。

但是,如果你是一个共享的喜好来做到这一点,那么,对于写作:

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

+0

我遇到问题。当一个按钮被按下时,另一个活动出现3秒,而不是我将传递该值的活动。如果我把这个代码意图我=新的意图(“com.yourPackage.yourActivity”); i.putExtra(“keyForExtra”,_ID); startActivity(i);应该出现3秒的活动将不起作用。 –

+0

我不明白这个问题。你必须在最终的活动中恢复得分。如果结果活动仅显示3秒钟,然后开始另一个活动本身,则将该恢复的分数传递给那里。为此,您可能希望将恢复的分数变量作为实例变量。 – harshit

+0

它不是显示3秒的结果活动。有一张图片只出现3秒,然后一个活动打开,询问用户他看到了什么。然后点击右边的按钮,分数应该缩小或增加 –

0

是否有一个特定的原因,您为什么要为每个问题提供不同的活动?对我来说这似乎相当低效(冗余代码,容易出错,内存明智)。您可以将所有问题和答案存储在数组中,并使用整数跟踪当前的问题和分数。在回答问题时,检查答案,更新分数,递增当前问题,获取新问题和答案,并将其设置为问题文本字段和按钮标签。由于所有事情都在一个活动中,因此无需通过分数。

+0

有一张图片只出现3秒,然后一个活动打开,询问用户他看到了什么。然后在点击右键时,分数应该缩小或增加。是的,冗余代码,容易出错和内存明智。我不知道如何使用数组。 –