2012-10-15 67 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秒,然後一個活動打開,詢問用戶他看到了什麼。然後在點擊右鍵時,分數應該縮小或增加。是的,冗餘代碼,容易出錯和內存明智。我不知道如何使用數組。 –