• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps TextView, setText() not working with Timer

Hi all,

I just started working with the Android SDK. I've read up on a bit of the literature at developer.android.com but coudln't wait to get my hands dirty writing some code. Well, dirty they are...

I'm trying to write a simple toy application that updates a string every second with the current time (unformatted). With the code below, my console prints out the current time every second, but the TextView doesn't. The TextView seems to update once at the beginning of the program, but otherwise stays the same. Sometimes I'll click the button and it will change once or twice, but that's about it.

I'm not really sure what's wrong here. The timer seems to be working fine, but not the TextView. I looked for something in the TextView that might allow me to force an instance of the TextView class to update, but could not find anything (which is what I would expect, since setText() should automatically update the TextView).

Anywho, my code is below. I'm using Android 2.1 (emulated). Any help would be greatly appreciated :)

Code:
public class HelloAndroid extends Activity {
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         TextView tv = (TextView) this.findViewById(R.id.text);
         
         Timer t = new Timer();
         t.scheduleAtFixedRate(new TestTask(tv), 0, 1000);
     }
 
     class TestTask extends TimerTask{
         TextView t;
         public TestTask(TextView t){
             this.t = t;
         }
         public void run(){
             System.out.println("time = " + System.currentTimeMillis());
             this.t.setText("time = " + System.currentTimeMillis());
         }
     }
 }
 
Here is source code and an attached android project showing how to display the time.

package com.displaytime;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class DisplayTime extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

updateTime();

handler.removeCallbacks(updateTimeTask);
handler.postDelayed(updateTimeTask, 1000);
}

private Runnable updateTimeTask = new Runnable() {
public void run() {
updateTime();
handler.postDelayed(this, 1000);
}
};

private void updateTime() {
final TextView time = (TextView) findViewById(R.id.time);
final Date currentTime = new Date( System.currentTimeMillis() );
final SimpleDateFormat formatterTime = new SimpleDateFormat( "H:mm:ss" );
time.setText( formatterTime.format(currentTime) );
}

@Override
protected void onStop() {
super.onStop();
handler.removeCallbacks(updateTimeTask);
}

@Override
protected void onResume() {
super.onResume();
handler.removeCallbacks(updateTimeTask);
handler.postDelayed(updateTimeTask, 1000);
}

@Override
protected void onDestroy() {
super.onDestroy();
if ( handler != null )
handler.removeCallbacks(updateTimeTask);
handler = null;
}

private Handler handler = new Handler();
}
 

Attachments

i got an error on

final TextView time = (TextView) findViewById(R.id.time);

here id is underlined how can i fix it
 
Back
Top Bottom