1. Welcome to the newer, better version of Android Forums! Be sure to see the announcement and enjoy checking it out!

    Some of you have been having login issues. - Please try now. Sorry for the trouble!
  2. All attachments uploaded on the first day of this new look need to be re-uploaded, or will appear broken. All prior to that, and all going forward, should work fine. We apologize for the inconvenience!

TextView, setText() not working with Timer


  1. 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());
             }
         }
     }

    Advertisement
  2. markb

    markb Well-Known Member

  3. jon21569

    jon21569 Member

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

    Attached Files:

  4. Oh wow,

    Thanks a bunch Jon! This is really helpful :)
  5. slang

    slang New Member

    i got an error on

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

    here id is underlined how can i fix it
  6. noobie_2012

    noobie_2012 New Member

    awesome!
    Thanks :)

Share This Page