使用 getSharedPreferences 保存新值
Save new value with getSharedPreferences
只要“new score
”大于oldscore
,我就会尝试保存一个新值(按钮的点击次数)。使用 TextView
我在用户点击按钮时显示点击次数,当时间结束时我想用另一个 TextView 显示分数。我没有任何日志错误,记录的文本视图一直显示 0
。请问你能帮帮我吗?
我的 MainActivity
...
public class MainActivity extends ActionBarActivity {
SharedPreferences mPrefs;
final String welcomeScreenShownPref = "welcomeScreenShown";
private TextView txtCount, textViewTimer;
private Button btnCount;
int count = 0;
int clicks = 0;
boolean[] timerProcessing = { false };
boolean[] timerStarts = { false };
private MyCount timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Check if we're running on Android 5.0 or higher
//if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Call some material design APIs here
// } else {
// Implement this feature without material design
//}
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
Boolean welcomeScreenShown = mPrefs.getBoolean(welcomeScreenShownPref, false);
if (!welcomeScreenShown) {
final MaterialDialog mMaterialDialog = new MaterialDialog(this);
mMaterialDialog.setTitle(R.string.dialog_title);
mMaterialDialog.setMessage(R.string.dialog_message);
mMaterialDialog.setPositiveButton(R.string.start, new View.OnClickListener() {
@Override
public void onClick(View v) {
mMaterialDialog.dismiss();
}
});mMaterialDialog.show();
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean(welcomeScreenShownPref, true);
editor.apply(); // Very important to save the preference
}
Typeface myTypeface = Typeface.createFromAsset(this.getAssets(),
"DS-DIGII.TTF");
TextView digital= (TextView) findViewById(R.id.textView2);
digital.setTypeface(myTypeface);
txtCount = (TextView) findViewById(R.id.textView1);
txtCount.setText(String.valueOf(count));
TextView txtRecord = (TextView) findViewById(R.id.record);
txtRecord.setText(String.valueOf(clicks));
btnCount = (Button) findViewById(R.id.button1);
Button btnRestart = (Button) findViewById(R.id.button2);
textViewTimer = (TextView) findViewById(R.id.textView2);
timer = new MyCount(10000, 1);
btnCount.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// start timer once when button first click
if (!timerStarts[0]) {
timer.start();
timerStarts[0] = true;
timerProcessing[0] = true;
}
if (timerProcessing[0]) {
count++;
txtCount.setText(String.valueOf(count));
}
}
});
btnRestart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
timerStarts[0] = false;
timerProcessing[0] = true;
count = 0;
txtCount.setText(String.valueOf(count));
timer.cancel();
textViewTimer.setText("10:000");
if (btnCount.isPressed()) {
timer.start();
}
}
});
btnRestart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vb.vibrate(1);
return false;
}
});
}
public class MyCount extends CountDownTimer {
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
textViewTimer.setText("0:000");
timerProcessing[0] = false;
final int oldscore = getSharedPreferences("myPrefs", MODE_PRIVATE).getInt("highscore", 0);
if (count > oldscore)
getSharedPreferences("myPrefs", MODE_PRIVATE).edit().putInt("highscore", clicks).commit();
final MaterialDialog mMaterialDialog = new MaterialDialog(MainActivity.this);
mMaterialDialog.setTitle("IL TUO PUNTEGGIO");
mMaterialDialog.setMessage("Hai fatto " + txtCount.getText().toString() + " click.");
mMaterialDialog.setPositiveButton("CONDIVIDI", new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Ho fatto " + txtCount.getText().toString() + " click in 10 secondi. Scarica l'app e prova a battermi.");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, ""));
}
});
mMaterialDialog.setNegativeButton("CHIUDI", new View.OnClickListener() {
@Override
public void onClick(View v) {
mMaterialDialog.dismiss();
}
});mMaterialDialog.show();
}
@Override
public void onTick(long millisUntilFinished) {
textViewTimer.setText("" + millisUntilFinished / 1000 + ":"
+ millisUntilFinished % 1000);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
编辑:简而言之,我正在尝试将 _count_
的值保存到 另一个 Texview
.
您需要在时间结束时保存您的 clicks
值。
在您的计时器 onFinish()
方法中,添加此代码
if (count > oldscore){
getSharedPreferences("myPrefs", MODE_PRIVATE).edit().putInt("highscore", clicks).commit();
//Save your value
getSharedPreferences("myPrefs", MODE_PRIVATE).edit().putInt("highscore_count", count).commit();
//Display the value
textView.setText(String.valueOf(count));
}
然后,在您的 onCreate
方法中,您获取该值并像这样显示它
SharedPreference prefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
int highscore_count = prefs.getInt("highscore_count", 0);
textView.setText(String.valueOf(highscore_count));
只要“new score
”大于oldscore
,我就会尝试保存一个新值(按钮的点击次数)。使用 TextView
我在用户点击按钮时显示点击次数,当时间结束时我想用另一个 TextView 显示分数。我没有任何日志错误,记录的文本视图一直显示 0
。请问你能帮帮我吗?
我的 MainActivity
...
public class MainActivity extends ActionBarActivity {
SharedPreferences mPrefs;
final String welcomeScreenShownPref = "welcomeScreenShown";
private TextView txtCount, textViewTimer;
private Button btnCount;
int count = 0;
int clicks = 0;
boolean[] timerProcessing = { false };
boolean[] timerStarts = { false };
private MyCount timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Check if we're running on Android 5.0 or higher
//if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Call some material design APIs here
// } else {
// Implement this feature without material design
//}
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
Boolean welcomeScreenShown = mPrefs.getBoolean(welcomeScreenShownPref, false);
if (!welcomeScreenShown) {
final MaterialDialog mMaterialDialog = new MaterialDialog(this);
mMaterialDialog.setTitle(R.string.dialog_title);
mMaterialDialog.setMessage(R.string.dialog_message);
mMaterialDialog.setPositiveButton(R.string.start, new View.OnClickListener() {
@Override
public void onClick(View v) {
mMaterialDialog.dismiss();
}
});mMaterialDialog.show();
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean(welcomeScreenShownPref, true);
editor.apply(); // Very important to save the preference
}
Typeface myTypeface = Typeface.createFromAsset(this.getAssets(),
"DS-DIGII.TTF");
TextView digital= (TextView) findViewById(R.id.textView2);
digital.setTypeface(myTypeface);
txtCount = (TextView) findViewById(R.id.textView1);
txtCount.setText(String.valueOf(count));
TextView txtRecord = (TextView) findViewById(R.id.record);
txtRecord.setText(String.valueOf(clicks));
btnCount = (Button) findViewById(R.id.button1);
Button btnRestart = (Button) findViewById(R.id.button2);
textViewTimer = (TextView) findViewById(R.id.textView2);
timer = new MyCount(10000, 1);
btnCount.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// start timer once when button first click
if (!timerStarts[0]) {
timer.start();
timerStarts[0] = true;
timerProcessing[0] = true;
}
if (timerProcessing[0]) {
count++;
txtCount.setText(String.valueOf(count));
}
}
});
btnRestart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
timerStarts[0] = false;
timerProcessing[0] = true;
count = 0;
txtCount.setText(String.valueOf(count));
timer.cancel();
textViewTimer.setText("10:000");
if (btnCount.isPressed()) {
timer.start();
}
}
});
btnRestart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vb.vibrate(1);
return false;
}
});
}
public class MyCount extends CountDownTimer {
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
textViewTimer.setText("0:000");
timerProcessing[0] = false;
final int oldscore = getSharedPreferences("myPrefs", MODE_PRIVATE).getInt("highscore", 0);
if (count > oldscore)
getSharedPreferences("myPrefs", MODE_PRIVATE).edit().putInt("highscore", clicks).commit();
final MaterialDialog mMaterialDialog = new MaterialDialog(MainActivity.this);
mMaterialDialog.setTitle("IL TUO PUNTEGGIO");
mMaterialDialog.setMessage("Hai fatto " + txtCount.getText().toString() + " click.");
mMaterialDialog.setPositiveButton("CONDIVIDI", new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Ho fatto " + txtCount.getText().toString() + " click in 10 secondi. Scarica l'app e prova a battermi.");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, ""));
}
});
mMaterialDialog.setNegativeButton("CHIUDI", new View.OnClickListener() {
@Override
public void onClick(View v) {
mMaterialDialog.dismiss();
}
});mMaterialDialog.show();
}
@Override
public void onTick(long millisUntilFinished) {
textViewTimer.setText("" + millisUntilFinished / 1000 + ":"
+ millisUntilFinished % 1000);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
编辑:简而言之,我正在尝试将 _count_
的值保存到 另一个 Texview
.
您需要在时间结束时保存您的 clicks
值。
在您的计时器 onFinish()
方法中,添加此代码
if (count > oldscore){
getSharedPreferences("myPrefs", MODE_PRIVATE).edit().putInt("highscore", clicks).commit();
//Save your value
getSharedPreferences("myPrefs", MODE_PRIVATE).edit().putInt("highscore_count", count).commit();
//Display the value
textView.setText(String.valueOf(count));
}
然后,在您的 onCreate
方法中,您获取该值并像这样显示它
SharedPreference prefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
int highscore_count = prefs.getInt("highscore_count", 0);
textView.setText(String.valueOf(highscore_count));