Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中,如何在单独的线程中更新google地图标记位置_Android_Multithreading_Api_Google Maps_Marker - Fatal编程技术网

在android中,如何在单独的线程中更新google地图标记位置

在android中,如何在单独的线程中更新google地图标记位置,android,multithreading,api,google-maps,marker,Android,Multithreading,Api,Google Maps,Marker,我试图在一个单独的线程中更新谷歌地图标记位置。我可以在主线程中很好地更新标记,但只要我在单独的线程中尝试,应用程序就会崩溃 日志: 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:

我试图在一个单独的线程中更新谷歌地图标记位置。我可以在主线程中很好地更新标记,但只要我在单独的线程中尝试,应用程序就会崩溃

日志:

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();

您可以使用
runOnUiThread()
修改辅助线程内的标记位置,例如,请参阅

在您的情况下,可能是这样的:

    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();

由于错误状态,您无法从主UI线程更新标记。你想在一个单独的线程上完成什么?我在跟踪某个东西,需要在地图上标出它的位置。对象的lng和lat将不断更改,我想更新一个标记以指向其位置。您可以使用
runOnUiThread()
来修改工作线程内的标记位置,例如,请参见此处:!!!伟大的榜样!!!非常好,谢谢你的快速帮助!