2012-10-13 36 views
2

你好,我是新來的Android和實際上我正在開發一個應用程序,從而用戶將在一個按鈕點擊按鈕應該記錄點擊事件 - 計數器應在遞增每次按鈕被點擊。該按鈕將顯示在一個活動中,一旦用戶點擊該按鈕,將顯示另一個活動,從而顯示結果。使用Android SharedPreferences保存和檢索值 - 反

實際上我有在分配sharedPreferences到按鈕並且然後顯示它到下一個活動因此具有的點擊次數的問題。

我使用的代碼如下:

MainActivity.java

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 

    /** Declare the variables being used */ 
    public static final String GAME_PREFERENCES = "GamePrefs"; 

    public static final String GAME_PREFERENCES_SCORE = "Score"; // Integer 
    int counter; 
    Button add; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     counter = 0; 
     add = (Button) findViewById (R.id.bAdd); 
     add.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       counter++; 

       Intent openClickActivity2 = new Intent("com.android.jay.Results"); 
       startActivity(openClickActivity2); 

      } 
     }); 
     } 
} 

Results.java

import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.widget.TextView; 
public class Results extends MainActivity{ 

    public void onCreate(Bundle savedInstanceState) { 

     SharedPreferences mGameSettings; 
     super.onCreate(savedInstanceState); 
     mGameSettings = getSharedPreferences(GAME_PREFERENCES, Context.MODE_PRIVATE); 
     setContentView(R.layout.results); 

     final TextView DisplayResults = 
       (TextView) findViewById(R.id.bAdd); 
       if (mGameSettings.contains(GAME_PREFERENCES_SCORE)) { 
       DisplayResults.setText(mGameSettings.getString(GAME_PREFERENCES_SCORE, 「counter」)); 
       } 
     } 

} 

任何幫助,指導我會更appreciated.Thank你

回答

0

使用這樣的方法:

public static void SavePreference(Context context, String key, Integer value) { 
    SharedPreferences.Editor editor = PreferenceManager 
      .getSharedPreferences(GAME_PREFERENCES, Context.MODE_PRIVATE) 
      .edit(); 
    editor.putInt(key, value); 
    editor.commit(); 
} 

和你櫃檯後的onclick ++補充一點:

SavePereference(context, "GAME_PREFERENCES_SCORE", counter); 
+0

你能請我在哪裏放置代碼的方法SavePreference更加明確,有關Results.java應能夠檢索數據並將其顯示到textView中,並且所需的答案是在按鈕上進行的點擊次數。一旦按鈕被點擊,用戶應該被引導到活動結果,計數將顯示爲1.請你幫我一下嗎?我正在盡我所能,但仍然無法做到so.thanking你提前 – spacemalbar

+0

你可以把你靜態方法的靜態類裏面。哪個班級和哪個地方並不重要。 –

1

您必須設置GAME_PREFERENCES_SCORE在MainActivity。在計數器++之後做這樣的事情:

getSharedPreferences(GAME_PREFERENCES,Context.MODE_PRIVATE).edit().setInt(GAME_PREFERENCES_SCORE,counter)。承諾();

+0

你會如何建議我檢索從按鈕到活動結果的onclick計數並因此顯示在文本視圖中?謝謝 – spacemalbar

+0

像這樣的東西將得到你剛剛在上面的代碼中設置的值:getSharedPreferences(GAME_PREFERENCES,Context.MODE_PRIVATE).getInt(GAME_PREFERENCES_SCORE); – kgrevehagen

0

簡單地做一個Preferences類

 `public class Preferences { 

String MASTER_NAME = "mysticmatrix_master"; 
SharedPreferences mysticMatrixPref; 

Preferences(Context context) { 
    mysticMatrixPref = context.getSharedPreferences(MASTER_NAME, 0); 
} 

public void setAddCount(int count) { 
    SharedPreferences.Editor prefEditor = mysticMatrixPref.edit(); 
    prefEditor.putInt("count", count); 
    prefEditor.commit(); 

} 

public int getAddCount() { 
    return mysticMatrixPref.getInt("count", 0); 
} 

}`

,並在您MainActivity.java把這個代碼

public class MainActivity extends Activity implements OnClickListener { 

ImageButton add; 
Preferences cpObj; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    preferences = new Preferences(getApplicationContext()); 

    /* 
    * getting the count variable and adding 1 in that to check the condition of showing rate activity and adds 
    */ 
    add = (Button) findViewById (R.id.bAdd); 
    add.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
     cpObj = new Preferences(getApplicationContext()); 
     cpObj.setAddCount(cpObj.getAddCount() + 1); 

     } 
    }); 
    } 
    } 

,並在結果活動剛剛得到的計數的值

'import android.content.Context; 
    public class Results extends MainActivity{ 
Preferences cpObj; 

public void onCreate(Bundle savedInstanceState) { 

    preferences = new Preferences(getApplicationContext()); 
    setContentView(R.layout.results); 

    final TextView DisplayResults = 
      (TextView) findViewById(R.id.bAdd); 
      DisplayResults.setText(cpObj.getAddCount()); 
      } 
    } } 

通過這一點,你會得到結果的默認值爲「0」,您可以設置您的首類

+0

你好,謝謝你的幫助。我已經嘗試過你的代碼,但仍然出現錯誤。我真的不知道爲什麼。它看起來很容易,但我很難做到這一點。多一點幫助將不勝感激。謝謝 – spacemalbar

+0

@GobinJay你在哪裏得到的錯誤和哪個錯誤??? ..你有沒有宣佈清單文件中的兩個活動? –