2016-07-25 2 views
0

Ich möchte mehrere Markierungen (möglicherweise 100 oder mehr) auf Google-Karte zeigen. Ich lese lat und lng von SQLite dann ich sie auf google Karte hinzufügen, aber zeigen mir nur ein Marker?Android - google map - wie zeigen mehrere Marker auf der Karte?

Muss ich Thema oder AsyncTask verwenden?

Hier ist mein Code:

public class StartActivity extends AppCompatActivity implements OnMapReadyCallback { 

    private GoogleMap mMap; 
    public SQLiteDatabase sql; 
    public Cursor cursor; 
    Context context; 
    public static String PACKAGE_NAME; 
    ArrayList<LatLng> markerPoints; 
    LatLng newLatLng; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_start); 
     // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
       .findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

     context = getApplicationContext(); 
     DBS db = new DBS(context); 
     PACKAGE_NAME = context.getApplicationContext().getPackageName(); 
     db.GetPackageName(PACKAGE_NAME); 
     db.CreateFile(); 
     try { 
      db.CreateandOpenDataBase(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     sql = db.openDataBase(); 

     try { 
      cursor = sql.rawQuery("SELECT _Lat,_Lng,_Date,_Time FROM Places where UserCode = 101", null); 
      if (cursor != null) { 
       if (cursor.moveToFirst()) { 
        do { 
         markerPoints = new ArrayList<LatLng>(); 
         Structure_DB sdb = new Structure_DB(); 
         sdb._Lat = cursor.getString(cursor.getColumnIndex("_Lat")); 
         sdb._Lng = cursor.getString(cursor.getColumnIndex("_Lng")); 
         sdb._Date = cursor.getString(cursor.getColumnIndex("_Date")); 
         sdb._Time = cursor.getString(cursor.getColumnIndex("_Time")); 
         newLatLng = new LatLng(Double.parseDouble(sdb._Lat), Double.parseDouble(sdb._Lng)); 
         markerPoints.add(newLatLng); 
        } while (cursor.moveToNext()); 
       } 
      } 
     } catch (Exception e) { 
     } finally { 
      cursor.close(); 
     } 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     mMap = googleMap; 
     Iterator<LatLng> iterator = markerPoints.iterator(); 
     while (iterator.hasNext()) { 
      MarkerOptions markerOptions = new MarkerOptions() 
        .position(iterator.next()); 
      mMap.addMarker(markerOptions); 
     } 
    } 
} 
+0

Mögliche Duplikat von [Wie mehrere Markierungen auf MapFragment in Google Map API v2 zeigen?] (Http://stackoverflow.com/questions/13855049/how-to-show-mehrere-marker-on-mapfragment-in-google-karte-api-v2) –

Antwort

1

Sie initialisieren Ihre markerPoints bei jeder Iteration.

entfernen markerPoints = new ArrayList<LatLng>(); von der do-while-Schleife und initialisieren es auf die Erklärung ArrayList<LatLng> markerPoints = new ArrayList<LatLng>();

+0

Oh, ja, vergessen. Sehr, sehr danke antonio. –

+0

antonio, mein Punkt ist eine Menge, wenn ich meine app, app zu langsam.Was kann ich tun? Muss ich Thread oder AsyncTask verwenden? –

+2

Sie könnten (und müssen) eine 'AsyncTask' verwenden, um die Datenbank abzufragen, aber leider muss das Zeichnen von Markierungen auf dem Haupt (UI) -Thread erfolgen und es ist eine wirklich schwere Operation. Die einzige Möglichkeit, die Geschwindigkeit zu verbessern, besteht darin, die Anzahl der gezeichneten Marker (Kartenelemente) zu reduzieren. Zum Beispiel mit Marker-Clustering (https://developers.google.com/maps/documentation/android-api/utility/marker-clustering) – antonio