无法获取TextView值

时间:2015-03-05 12:18:38

标签: android

我有一个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的值以将其保存在SharedPref中时

 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")));
}

调用此函数后,我可以看到

的结果
   Log.d("Timer Value outside cdt", ""+t); 

但是第二个陈述没有结果

            Log.d("Timer Value outside cdt", ""+millisUntilFinished
                    / 1000;);

2 个答案:

答案 0 :(得分:1)

将值存储在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);

答案 1 :(得分:0)

确保您的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();
}
}