2012-06-04 3 views
2

Вот мой код:TimerTask не вступает в силу

public class SomeName extends MapActivity implements OnClickListener, OnTouchListener{ 
public Timer t1 = new Timer(); 
public TimerTask tt; 
public long interval = 5000; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.map); 
    timer(); 
} 
public final void timer() 
{ 

    t1 = new Timer(); 
    tt = new TimerTask() { 
     @Override 
     public void run() { 
      systemClick(); 
     } 
    }; 
    t1.scheduleAtFixedRate(tt, 10000, interval); 
} 
public void systemClick() 
{ 
     Toast.makeText(getApplicationContext(),"System Button Clicked", 5).show(); 
} 

На самом деле, я хочу вызвать некоторую функцию, где я обновить мое местоположение.

Но я не могу понять, почему я никогда не получаю тост на экране. Я новичок в android.

Спасибо за любую помощь.

+0

Как раз вы знаете, вы создаете экземпляр t1 дважды. Можете ли вы заменить getApplicationContext() на 'this'? – Tushar

+0

@TusharDhoot, исправлены оба, все тот же. –

+0

Получаете ли вы что-нибудь в своем логарифме? Это журнал ошибок обычно у основания Eclipse. – Tushar

ответ

1

использование обработчика в вашей деятельности

final Handler handlerforadd = new Handler(); 
Runnable runnableforadd = new Runnable() { 
    @Override 
    public void run() { 
     handlerforadd.postDelayed(this, 1000); 
    } 
}; 

handlerforadd.postDelayed(runnableforadd, 0); 
+0

Функция 'scheduleAtFixedRate' бесконечно повторяет эту функцию. Насколько я понимаю, этот код будет выполнен один раз, не так ли? –

+0

'handerlerforadd.postDelayed (this, 1000)' в 'run()' позволяет ему снова запускаться за 1 секунду. –

0

Причиной является Toast должно быть сделано в потоке пользовательского интерфейса. В вашем текущем коде метод run() выполняется в отдельном потоке. Я бы предложил посмотреть на это article на процессы и темы. @parag является правильным с использованием Handler - это один из способов получить ссылку на поток пользовательского интерфейса, но есть и другие методы.

+0

Это точно. Это должно было быть ясно из Logcat, потому что обычно появляется предупреждение или ошибка. – Tushar

Смежные вопросы