我有一个TextView,它在活动A中显示倒计时计时器,倒计时计时器的功能在B类中,在活动A中:
TextView tvTime = (TextView) findViewById(R.id.tv_time);
B a = new B(tvTime);
a.startTimer(20000);在B类中:
public B(TextView tvTime)
{
this.tvTime = tvTime;
}//倒数计时器
public void startTimer(int t) {
Log.d("Timer Value outside cdt", ""+t);
timer = new CountDownTimer(t, 1000) {
public void onTick(long millisUntilFinished) {
tvTime.setText(""+millisUntilFinished
/ 1000;);
Log.d("Timer Value outside cdt", ""+millisUntilFinished
/ 1000;);
}
public void onFinish() {
tvTime.setText("000");
}
};
timer.start();
}它工作得很好,但是当我试图通过使用下面的代码来保存tvTime值时,它不起作用了。
public void saveGame(){
time = tvTime.getText().toString();
spEdit.putString(SAVED_TIME, time);
spEdit.commit();
}编辑:
通过添加2条调试语句,我发现问题不在于保存值,而是在获取存储值时调用startTimer()时存在的问题
public void getGame(){
startTimer(Integer.valueOf(sp.getString(SAVED_TIME, "0000")));
}调用这个func之后,我可以看到
Log.d("Timer Value outside cdt", ""+t); 但是第二次声明没有显示结果
Log.d("Timer Value outside cdt", ""+millisUntilFinished
/ 1000;);发布于 2015-03-05 12:22:14
若要在SP中存储值,请执行以下操作:
time = tvTime.getText().toString();
Editor editor = sharedpreferences.edit();
editor.putString("NAME", time );
editor.commit();要从SP检索数据:
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String name= prefs.getString("NAME", null);发布于 2015-03-05 12:37:32
确保您的textview's object is accessible in the particular method,它可能超出了您的方法的范围。如果可能的话,可以在class level中声明textview对象,这样类的所有方法都可以使用
public class yourclass
{
TextView tvTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//--- text view---
TextView txtView = (TextView) findViewById(R.id.text_id);
}
public void saveGame(){
time = tvTime.getText().toString();//now you can use your textview here
spEdit.putString(SAVED_TIME, time);
spEdit.commit();
}
}https://stackoverflow.com/questions/28877727
复制相似问题