2015-06-10 3 views
1

Я пытаюсь обновить позицию маркера google в отдельном потоке. Я могу обновить маркер в основном потоке, но как только я попробую его в отдельном потоке, приложение выйдет из строя.Как обновить позицию маркера google в отдельном потоке в android

Logcat:

06-10 12:35:37.107: E/AndroidRuntime(25915): FATAL EXCEPTION: Thread-2909 
06-10 12:35:37.107: E/AndroidRuntime(25915): java.lang.IllegalStateException: Not on the main thread 
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.l.a.ce.b(Unknown Source) 
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.maps.api.android.lib6.d.ct.a(Unknown Source) 
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.maps.api.android.lib6.d.aq.a(Unknown Source) 
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.android.gms.maps.model.internal.t.onTransact(SourceFile:73) 
06-10 12:35:37.107: E/AndroidRuntime(25915): at android.os.Binder.transact(Binder.java:380) 
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.android.gms.maps.model.internal.zzi$zza$zza.setPosition(Unknown Source) 
06-10 12:35:37.107: E/AndroidRuntime(25915): at com.google.android.gms.maps.model.Marker.setPosition(Unknown Source) 

и нить:

new Thread(new Runnable() { 
    Marker mkr = marker; 
    public void run(){ 
     double lng = 78.486671; 
     double lat = 17.385044; 
     mkr.setPosition(new LatLng(lat, lng)); 
    } 
}).start(); 
+0

Как говорится об ошибках, вы не можете обновить маркеры от основного потока пользовательского интерфейса. Что вы пытаетесь сделать, выполняя это в отдельном потоке? – dharms

+0

Im отслеживает что-то и нужно отметить его положение на карте. Lng и lat объекта будут меняться, и я хотел бы обновить маркер, чтобы указать его местоположение. –

+0

Вы можете использовать 'runOnUiThread()' для изменения позиции маркера внутри рабочего потока, например, здесь: http://stackoverflow.com/questions/11140285/how-to-use-runonuithread/11140429#11140429 –

ответ

0

Вы можете использовать runOnUiThread() для того, чтобы изменить положение маркера внутри рабочего потока, для примера см here.

В вашем случае это будет что-то вроде этого:

new Thread(new Runnable() { 
     Marker mkr = marker; 
     public void run(){ 

      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        double lng = 78.486671; 
        double lat = 17.385044; 
        mkr.setPosition(new LatLng(lat, lng)); 
       } 
      }); 

     } 
    }).start(); 
Смежные вопросы