2015-10-12 7 views
0

Ну, я делал много попыток, чтобы сделать цикл обновления addMarker, моих карт Google.Ошибка обновления addMarker google Maps 2v

Когда я начала свою деятельность, значок появляется на карте, но когда функция снова вызывается в потоке я получаю ошибку ...

Я не знаю, что я могу сделать, я стараюсь объявить addMarker к вар Marker, и в нити объявляют var.remove() и поставить еще один addMarker, и я получаю ту же ошибку ...

Это map_activity XML

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity"> 
<fragment 
android:id="@+id/map" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
class="com.google.android.gms.maps.SupportMapFragment"/> 
<include layout="@layout/opciones_menu" android:id="@+id/opciones_menu"/> 
</RelativeLayout> 

мой map_activity класс

public class Mapa_activity extends FragmentActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.mapa_activity); 
mMap = ((SupportMapFragment) 
getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); 
//var global for updating the lat and lon 
global=((Global)getApplicationContext()); 


Thread background = new Thread(new Runnable() { 
private final Handler handler = new Handler() { 
public void handleMessage(Message msg) { 
renovarMarcador(); 
} 
}; 

// After call for background.start this run method call 
public void run() { 
Message msgObj = new Message(); 
while(!Mapa_activity.this.isFinishing()) 
{ 
handler.sendMessage(msgObj); 
try { 
System.out.println("****30s"); 
Thread.sleep(30000); 
} catch (InterruptedException e) { 
e.printStackTrace(); 
} 
}//while 
} 
}); 
// Start Thread 
background.start(); 
//After call start method thread called run Method 
} 




@Override 
protected void onResume() { 
super.onResume(); 
renovarmarcador(); 
} 

public void renovarmarcador(){ 
mMap.clear(); 
Double lat, lon; 
lat = Double.parseDouble(global.gety(String.valueOf(NID))); 
lon = Double.parseDouble(global.getx(String.valueOf(NID))); 
System.out.println("LAT: " + lat + "\nLON: " + lon); 
// Creating a LatLng object for the current location 
LatLng latLng = new LatLng(lat, lon); 

mMap.addMarker(new MarkerOptions().position(latLng)); 

// Showing the current location in Google Map 
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
// Zoom in the Google Map 
mMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 
} 
} 

Я хочу знать, где проблема ...

10-12 16:59:37.427 25539-25539/com.gpslocmex.locmex E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    android.util.AndroidRuntimeException: { what=0 when=-1ms } This message is already in use. 
      at android.os.MessageQueue.enqueueMessage(MessageQueue.java:285) 
      at android.os.Handler.sendMessageAtTime(Handler.java:473) 
      at android.os.Handler.postAtTime(Handler.java:285) 
      at com.google.maps.api.android.lib6.d.cm.c(Unknown Source) 
      at com.google.maps.api.android.lib6.d.cm.b(Unknown Source) 
      at com.google.maps.api.android.lib6.d.et.a(Unknown Source) 
      at com.google.android.gms.maps.internal.j.onTransact(SourceFile:167) 
      at android.os.Binder.transact(Binder.java:326) 
      at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(Unknown Source) 
      at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source) 
      at com.gpslocmex.locmex.Mapa_activity.renovarmarcador(Mapa_activity.java:218) 
      at com.gpslocmex.locmex.Mapa_activity$4$1.handleMessage(Mapa_activity.java:161) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4745) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
      at dalvik.system.NativeStart.main(Native Method) 

ответ

1

Ошибка выбрасывается, потому что вы называете new Message() раз и отправить сообщение более чем один раз.

public void run() { 

    while (!Mapa_activity.this.isFinishing()) { 

     Message msgObj = new Message(); 

     handler.sendMessage(msgObj); 
     try { 
      System.out.println("****30s"); 
      Thread.sleep(30000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    }//while 
} 
+0

И как я могу это исправить ?, я пытался по-разному, чтобы сделать этот цикл обновляя маркер ... – DarckBlezzer

+0

@DarckBlezzer, может быть, вы можете поместить новое сообщение() в то время цикла. – Zephyr

+0

Спасибо за ответ, и извините за мое невежество, я новичок в этом ... – DarckBlezzer