Yo sabía que este tipo de pregunta existe, pero estoy confundido aquí. Estoy usando este código:

    public class NewWaitAppActivity extends Activity {
private Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mHandler = new Handler();
lcmgr = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
Thread LocThread = new Thread(mLocationUpdater);
Log.d("TAG","About to start worker thread");
LocThread.start();
}
public void startTimer(View v) {
if (mStartTime == 0L) {
mStartTime = System.currentTimeMillis();
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask, 100);
}
}
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
final long start = mStartTime;
long millis = System.currentTimeMillis() - start;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
TextView timer = (TextView) findViewById(R.id.time_elapsed);
if (seconds < 10) {
timer.setText("" + minutes + ":0" + seconds);
} else {
timer.setText("" + minutes + ":" + seconds);
}
mHandler.postDelayed(this, 1000);
}
};
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
//Called when a new location is found by the network location provider.
mStopTimer();
}
};
private Runnable mLocationUpdater = new Runnable(){
public void run(){
Log.d("TAG","Inside worker thread");
lcmgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
};
}

Estoy básicamente tratando de detener el temporizador del hilo principal cuando las actualizaciones de ubicación. La aplicación no inicia, se da el error mencionado anteriormente durante el tiempo de ejecución. El error es debido a requestLocationUpdates(). Parece que no puede llamar a stopTimer() dentro de onLocationChanged(). ¿Cómo puedo corregir esto?

InformationsquelleAutor sgarg | 2012-01-27

3 Comentarios

  1. 6

    cuál es la necesidad de llamar a «lcmgr.requestLocationUpdates(….)» desde el hilo que has creado, cuando ella misma es una devolución de llamada asincrónica basada en el mecanismo?
    Sólo mover este código en el onCreate() de la actividad y deben funcionar las cosas bien.

    También este error se produce cuando intenta crear un controlador dentro de un hilo que no es la intención de bucle en absoluto (es decir. los hilos que no llame Looper.preparar, como el seguimiento de la pila de los estados también).

    Una explicación más detallada sobre este error se puede encontrar en este sitio también.
    Pero una buena explicación aquí.
    http://www.aviyehuda.com/2010/12/android-multithreading-in-a-ui-environment/

    • gracias por la respuesta! al menos se ejecuta la aplicación.
  2. 60

    No hay necesidad de escribir una complicada solución:

    locationManager.requestLocationUpdates(provider, 5000, 0, mylistener, Looper.getMainLooper());

    Esto va a funcionar muy bien.

    • Por desgracia, que no se fije para mí. 🙁
    • Gran solución!
    • Bueno!. Esto debe ser aceptado respuesta.
    • Looper.getMainLooper() fija. Mi código utilizado Looper.mylooper() antes de la corrección.
  3. 0

    No se puede acceder a/generar subproceso de Eventos de eventos específicos, y usted no necesita solicitar actualizaciones de ubicación en un hilo, en lugar usted puede utilizar el servicio para lograr el mismo.

Dejar respuesta

Please enter your comment!
Please enter your name here