¿Cómo mostrar tostadas dentro del temporizador?

Quiero mostrar el mensaje de pan tostado dentro del temporizador y utilicé el siguiente código:

timer.scheduleAtFixedRate( new TimerTask() { public void run() { try { fun1(); } catch (Exception e) {e.printStackTrace(); } } }, 0,60000); public void fun1() { //want to display toast } 

Y estoy recibiendo error de seguimiento:

WARN / System.err (593): java.lang.RuntimeException: No se puede crear el controlador dentro de subproceso que no ha llamado Looper.prepare ()

WARN / System.err (593): en android.os.Handler. (Handler.java:121)

WARN / System.err (593): en android.widget.Toast. (Toast.java:68)

WARN / System.err (593): en android.widget.Toast.makeText (Toast.java:231)

Gracias.

7 Solutions collect form web for “¿Cómo mostrar tostadas dentro del temporizador?”

No puede realizar actualizaciones de interfaz de usuario dentro de Thread separado, como Timer. Debe utilizar el objeto Handler para la actualización de la interfaz de usuario:

 timer.scheduleAtFixedRate( new TimerTask() { private Handler updateUI = new Handler(){ @Override public void dispatchMessage(Message msg) { super.dispatchMessage(msg); fun1(); } }; public void run() { try { updateUI.sendEmptyMessage(0); } catch (Exception e) {e.printStackTrace(); } } }, 0,60000); 

La forma más fácil (IMO) es:

 new Timer().scheduleAtFixedRate(new TimerTask() { @Override public void run() { final String message = "Hi"; MyActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MyActivity.this, message, Toast.LENGTH_SHORT).show(); } }); } }); 

La clave es MyActivity.this.runOnUiThread (Runnable).

Tienes que llamar a UIThread para mostrar Toast. No desde el hilo del temporizador.

Else llama a subproceso de interfaz de usuario de ese subproceso de temporizador.

Este enlace le ayudará,

http://developer.android.com/resources/articles/timed-ui-updates.html

y esto

http://developer.android.com/guide/appendix/faq/commontasks.html#threading

Gracias.

Crear un Handler y mostrar tostadas en este

 private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { // Toast here } }; 

Necesita tener acceso al Contexto de la aplicación para poder hacerlo. Trate de crear su propia clase que toma el contexto como parámetro de entrada:

 private class MyTimerTask extends TimerTask { private Context context; public MyTimerTask(Context context) { this.context = context; } @Override public void run() { Toast.makeText(context, "Toast text", Toast.LENGTH_SHORT).show(); } } 

Luego en su temporizador:

 timer.scheduleAtFixedRate( new MyTimerTask(this), 0,60000); 

Quería hacer un proyecto sencillo que pudiera mostrar un brindis en un temporizador. El temporizador se iniciará utilizando un servicio. A continuación, el temporizador se inicia cuando se inicia el servicio y se detiene cuando se detiene el servicio.

Clase 1

 package com.example.connect; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { Button button1,button2; private Handler mHandler = new Handler(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1=(Button)findViewById(R.id.button1); button2=(Button)findViewById(R.id.button2); } public void Start(View v) { startService(new Intent(MainActivity.this , Connect_service.class)); } public void Stop(View v) { stopService(new Intent(MainActivity.this , Connect_service.class)); } } 

Clase 2

 package com.example.connect; import java.util.Timer; import java.util.TimerTask; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.widget.Toast; public class Connect_service extends Service{ Timer timer = new Timer(); TimerTask updateProfile = new CustomTimerTask(Connect_service.this); public void onCreate() { super.onCreate(); Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show(); timer.scheduleAtFixedRate(updateProfile, 0, 5000); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show(); timer.cancel(); } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } } 

Clase 3

 package com.example.connect; import java.util.TimerTask; import android.content.Context; import android.os.Handler; import android.widget.Toast; public class CustomTimerTask extends TimerTask { private Context context; private Handler mHandler = new Handler(); public CustomTimerTask(Context con) { this.context = con; } @Override public void run() { new Thread(new Runnable() { public void run() { mHandler.post(new Runnable() { public void run() { Toast.makeText(context, "In Timer", Toast.LENGTH_SHORT).show(); } }); } }).start(); } } 

Estoy tratando de hacer mi propia tostada con mis propias opiniones.

He combinado con éxito sus enfoques. El código siguiente me permite mostrar brindis y cambiar / quitar vistas sin estrellarse, sólo cambia los parámetros del constructor de MyTimerTask a lo que usted necesita para trabajar.

 public void yourFunction(){ Timer timer = new Timer(); MyTimerTask mtc = new MyTimerTask(this.getContext(), tvNotice); timer.schedule(mtc, 1000); } private class MyTimerTask extends TimerTask { private TextView tv; private Context context; public MyTimerTask(Context pContext, TextView pTv) { this.tv = pTv; this.context = pContext; } @Override public void run() { updateUI.sendEmptyMessage(0); } private Handler updateUI = new Handler(){ @Override public void dispatchMessage(Message msg) { super.dispatchMessage(msg); tv.setText("TextView Message"); Toast.makeText(context, "Toast Message", 0).show(); } }; } 
  • Cómo cancelar Toast creado en un método diferente en android?
  • Android Vibrar en la tostada (Homer: Mmmm vibrar en la tostada)
  • Estoy tratando de mostrar un brindis cuando se presiona este botón. Pero el código no funciona
  • Problema con Toast en llamada AsyncTask método
  • Cómo configurar el estilo tostado como tema?
  • Tostada personalizada en android: un ejemplo sencillo
  • Error al mostrar tostadas
  • ¿Cómo puedo mostrar un brindis por una duración específica?
  • Error debido a la combinación no válida de Toast y OnClickListener
  • Cómo establecer el tiempo de visualización de Toast menos de Toast.LENGTH_SHORT
  • Desea ocultar la tostada de Android cuando la aplicación está en segundo plano
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.