LocationManager: java.lang.RuntimeException: не удается создать обработчик внутри потока, который не вызвал Looper.prepare ()

Обычно ошибка при выполнении чего-то в потоке пользовательского интерфейса из другого потока, я думал, но я не понимаю, что я делаю неправильно. Похоже, что ошибка появляется, когда телефон путешествует, поэтому с изменением местоположения GPS.

Я хочу, чтобы последнее место было сохранено, поэтому в пользовательском интерфейсе ничего нет. У меня есть следующий метод, вызванный из основного действия:

public void getFreshDeviceLocation(long interval, final long maxtime) { if (gps_recorder_running){return;} gpsTimer = new Timer(); //starts location startMillis=System.currentTimeMillis(); // receive updates for (String s : locationManager.getAllProviders()) { LocationListener listener=new LocationListener() { @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } @Override public void onLocationChanged(Location location) { // if this is a gps location, we can use it if (location.getProvider().equals( LocationManager.GPS_PROVIDER)) { doLocationUpdate(location, true); //stores the location in the prefs stopGPS(); } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } }; locationManager.requestLocationUpdates(s, interval, //line 97, error! minDistance, listener); myListeners.add(listener); gps_recorder_running = true; } // start the gps receiver thread gpsTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { Location location = getBestLocation(); doLocationUpdate(location, false); if ((System.currentTimeMillis()-startMillis)>maxtime){if (maxtime>0){stopGPS();}} //Updates depend on speed of the device float speed=pref.DeviceLocation().getSpeed(); if (speed<1){if (speedclass!=0){speedclass=0;stopGPS();getFreshDeviceLocation(300000,0);}} if ((speed>=1)&&(speed<3)){if (speedclass!=1){speedclass=1;stopGPS();getFreshDeviceLocation(90000,0);}} if ((speed>=3)&&(speed<17)){if (speedclass!=2){speedclass=2;stopGPS();getFreshDeviceLocation(15000,0);}} if (speed>=17){if (speedclass!=3){speedclass=3;stopGPS();getFreshDeviceLocation(10000,0);}} } }, 0, interval); } 

Ошибка, которую я получаю:

 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:121) at android.location.LocationManager$ListenerTransport$1.<init>(LocationManager.java:139) at android.location.LocationManager$ListenerTransport.<init>(LocationManager.java:137) at android.location.LocationManager._requestLocationUpdates(LocationManager.java:708) at android.location.LocationManager.requestLocationUpdates(LocationManager.java:630) at com.appiclife.tmoflashlight.TMO_LocationManager.getFreshDeviceLocation(TMO_LocationManager.java:97) at com.appiclife.tmoflashlight.TMO_LocationManager$2.run(TMO_LocationManager.java:116) at java.util.Timer$TimerImpl.run(Timer.java:289) 

Линия 97 = locationManager.requestLocationUpdates (с, интервал, minDistance, слушатель); (Класс LocationManager)

Похоже, мне нужно вызвать Looper.prepare (); И Looper.loop (); Где-то, но я не вижу, где? Это может иметь какое-то отношение к этому вопросу AsyncTask и Looper.prepare () error

В этом случае я думаю, что вам нужен поток петлителя, это может вам помочь.

Или вы можете создать обработчик внутри вашего метода run (), сделав его потоком петлителя в следующем примере.

 Handler mHandler; public void run(){ Looper.prepare(); mHandler = new Handler(){ public void handleMessage(Message msg){ Looper.myLooper().quit(); } }; //do your stuff //... mHandler.sendEmptyMessage(0); //send ourself a message so the looper can stop itself Looper.loop(); }//end of run 

Пожалуйста, дайте мне знать, если это поможет 🙂

  runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub alert("Error: " + message); } }); 

Вы можете использовать просто runOnUiThread, чтобы исправить эту проблему. Благодаря!!

Intereting Posts
Условно установленная первая активность в Android Найдите расположение маркеров в карте Google, перемещая позиции камеры Android – Ошибка при создании Player: CommandInvokationFailure: не удалось повторно упаковать ресурсы Как я могу исключить ActionBar при переходе между Activity на Android 5.0 Открыть следующее действие только после того, как навигационный ящик завершает закрытие анимации Рабочий процесс биллинга в приложении в ListView Почему параметры макета работают в Android-программировании? Список местных: MvxBind binders Android html.fromhtml + spannablestring Как поймать / прослушать загрузку веб-браузера Android Дисплей пейджингового управления с белыми точками на верхней части Android Android – Остановить AsyncTask при нажатии кнопки «Назад» и вернуться к предыдущей операции Задать функциональность кнопки возврата виджета поиска Речь в текст в эмуляторе: Активность не обнаружена для обработки Intent Идентификатор проекта GCM GC, какой?