Wie man Marker die ganze Zeit von AsyncTask oder Handler in google map Version 2 zeigt

Die letzte Sache, die ich tue, ist: Ich habe die Google Map in meiner Anwendung mit Som-Tasten und Extra-Sachen. Aber ich muss auch den aktualisierten Ort eines Markers die ganze Zeit in meiner Karte zeigen (ich bekomme die Daten vom externen Gerät nicht GPS Sensor von Android Handy). Also dachte ich mit Thread zuerst, aber dann wechselt zu AsyncTask, wie Sie in meinem Code sehen und versucht, addMarker-Methode dort zu verwenden, aber jedes Mal, wenn ich es ausführen, läuft einfach nur die Arbeit. Ich möchte nur eine Markierung auf der Karte jetzt aber jetzt erfolgreich! Die GoogleMap-Karte kann nicht über UI-Thread und innerhalb von AsyncTask erreichbar werden warum? Jemand begegnete das? Was soll ich tun, um das zu lösen … plz helfen

package com.example.mapsversion2; //All imports public class MainActivity extends Activity { static final LatLng exmpoint = new LatLng(59.331438,18.064957); public static GoogleMap map; Button button; Button waypointButton; Button destinationButton; Marker wayPoint; TextView positiontext; int countclick= 3; public static DataModel autoboxdata= new DataModel(); public static Bitmap arrowBitmap; Marker currentPlace; MapFragment mapF; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mapF = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)); map= mapF.getMap(); map.setMapType(GoogleMap.MAP_TYPE_HYBRID); // positiontext = (TextView) findViewById(R.id.position); // Move the camera instantly to hamburg with a zoom of 15. map.moveCamera(CameraUpdateFactory.newLatLngZoom(exmpoint,15)); // Zoom in, animating the camera. map.animateCamera(CameraUpdateFactory.zoomTo(6), 2000, null); addListenerOnButton(); map.setOnMarkerDragListener(this); new PositionUpdate1().execute(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public void addListenerOnButton() { destinationButton= (Button) findViewById(R.id.destinationB); destinationButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //do something } }); } } public class PositionUpdate1 extends AsyncTask<Void, Void, Void>{ @Override protected Void doInBackground(Void...arg0) { // TODO Auto-generated method stub map.addMarker(new MarkerOptions() .position(hereIam) ); System.out.println("hej"); return null; } } } 

Hier ist die LogCat:

  • Android-Fehler: Kann kein Fenster hinzufügen - Token null ist nicht für eine Anwendung
  • Instagram von Android auf einem bestimmten Benutzer öffnen und Bildunterschrift zum hochgeladenen Bild hinzufügen
  • Android bekommt abziehbares Bild nach picasso geladen
  • Wie zu lösen java.lang.OutOfMemoryError Probleme in Android
  • Facebook-Kommentar-Box wird nicht in Android-Webview angezeigt
  • FindViewById () liefert null - versuchte ALLES
  •  02-17 18:57:17.805: E/AndroidRuntime(9905): FATAL EXCEPTION: main 02-17 18:57:17.805: E/AndroidRuntime(9905): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mapsv2/com.example.mapsv2.MainActivity}: java.lang.NullPointerException 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125) 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.app.ActivityThread.access$600(ActivityThread.java:140) 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227) 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.os.Handler.dispatchMessage(Handler.java:99) 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.os.Looper.loop(Looper.java:137) 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.app.ActivityThread.main(ActivityThread.java:4898) 02-17 18:57:17.805: E/AndroidRuntime(9905): at java.lang.reflect.Method.invokeNative(Native Method) 02-17 18:57:17.805: E/AndroidRuntime(9905): at java.lang.reflect.Method.invoke(Method.java:511) 02-17 18:57:17.805: E/AndroidRuntime(9905): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 02-17 18:57:17.805: E/AndroidRuntime(9905): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 02-17 18:57:17.805: E/AndroidRuntime(9905): at dalvik.system.NativeStart.main(Native Method) 02-17 18:57:17.805: E/AndroidRuntime(9905): Caused by: java.lang.NullPointerException 02-17 18:57:17.805: E/AndroidRuntime(9905): at com.example.mapsv2.MainActivity.onCreate(MainActivity.java:140) 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.app.Activity.performCreate(Activity.java:5206) 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083) 02-17 18:57:17.805: E/AndroidRuntime(9905): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064) 02-17 18:57:17.805: E/AndroidRuntime(9905): ... 11 more 02-17 18:57:17.935: E/android.os.Debug(2287): !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error 

  • Manifest Fusion fehlgeschlagen: uses-sdk: minSdkVersion 8 kann nicht kleiner sein
  • Zeigen Sie .gif mit android.graphics.Movie
  • Spinner mit Klick auf Listener
  • Völlig transparente Statusleiste und Navigationsleiste auf Lutscher
  • Android: Zeigt die Tastatur bewegt meine Komponenten auf, ich möchte sie stattdessen verstecken
  • Root-Zugriff mit java.io.file auf Android
  • 3 Solutions collect form web for “Wie man Marker die ganze Zeit von AsyncTask oder Handler in google map Version 2 zeigt”

    Sie versuchen, eine Marker auf die Karte in den Hintergrund-Thread hinzufügen, aber Sie können nicht aktualisieren UI in Android aus Thread andere als UI-Thread. Also, verschiebe deinen map.addMarker Aufruf an die onPostExecute Methode, die im UI-Thread aufgerufen wird, nachdem der Hintergrund abgeschlossen ist:

     public class PositionUpdate1 extends AsyncTask<Void, Void, Location> { @Override protected Location doInBackground(Void...arg0) { // get your location... return hereIam; } @Override protected void onPostExecute(Location loc) { map.addMarker(new MarkerOptions().position(loc)); } } 

    Wenn Sie den Marker kontinuierlich aktualisieren möchten, ist der einfachste Weg, einen Handler :

     public class MainActivity extends Activity { final int MARKER_UPDATE_INTERVAL = 2000; /* milliseconds */ Handler handler = new Handler(); GoogleMap map; Marker marker; Location location; Runnable updateMarker = new Runnable() { @Override public void run() { marker.remove(); marker = map.addMarker(new MarkerOptions().position(location)); handler.postDelayed(this, MARKER_UPDATE_INTERVAL); } }; @Override public void onCreate(Bundle savedInstanceState) { map = ...; // get map location = ...; // get location marker = map.addMarker(new MarkerOptions().position(location)); handler.postDelayed(updateMarker, MARKER_UPDATE_INTERVAL); } @Override protected void onDestroy() { handler.removeCallbacks(updateMarker); super.onDestroy(); } } 

    Du kannst so etwas machen. Laden Sie die Daten, die Sie in doInBackground benötigen, und zeichnen Sie die Markierungen in onProgressUpdate. Um onProgressUpdate anzurufen, mache einfach einen publishProgress () von doInBackground. Auf diese Weise können Sie die Benutzeroberfläche aus der ASyncTask aktualisieren. Funktioniert bei mir.

     public class CDrawHotspotsAsync extends AsyncTask<Void, CHotspot, Boolean> { private final Context mCntxt; private final GoogleMap mGMap; // --------------------------------------------------------- public CDrawHotspotsAsync(Context cntxt, GoogleMap gmap) { this.mCntxt = cntxt; this.mGMap = gmap; } // --------------------------------------------------------- private void drawMarker(GoogleMap gmap, CHotspot hotspot) { // Set marker options MarkerOptions mo = new MarkerOptions(); mo.position(hotspot.getPosition()); mo.title(hotspot.getName()); String descr = hotspot.getAddress() + ", " + hotspot.getPostal() + ", " + hotspot.getCity(); mo.snippet(descr); mo.icon(BitmapDescriptorFactory.fromResource(R.drawable.hotspot_marker)); // Add marker to map gmap.addMarker(mo); } // --------------------------------------------------------- @Override protected Boolean doInBackground(Void... params) { // Get hotspots from database CHotspotList hotspots = new CHotspotList(this.mCntxt); ArrayList<CHotspot> arrHotspots = hotspots.getHotspotList(); for (CHotspot hotspot : arrHotspots) { // Publish progress publishProgress(hotspot); } // Always return true return true; } // --------------------------------------------------------- @Override protected void onProgressUpdate(CHotspot... hotspot) { // Draw the marker drawMarker(this.mGMap, hotspot[0]); } } 

    Wenn Ihre asynchische Aufgabe mehr als eine Markierung lädt, können Sie Folgendes tun:

     private class AddMarker implements Runnable { private GoogleMap map; private MarkerOptions options; public AddMarker(GoogleMap map, MarkerOptions options) { this.map = map; this.options = options; } @Override public void run() { map.addMarker(options); } } Runnable addMarker = new AddMarker(map, markerOptions); activity.runOnUiThread(addMarker); 

    Und natürlich solltest du die asynchrone Aufgabe mit dem Aktivitätsobjekt konstruieren.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.