2016-07-25 19 views
0

Googleマップに複数のマーカー(100以上かもしれない)を表示したい。私はGoogleの地図上にそれらを追加しsqliteのから LAT LNGを読んでいますが、は私に一つだけのマーカーを示して?Android - Googleマップ - 地図上に複数のマーカーを表示するにはどうすればよいですか?

Doを使用する必要がありますスレッドまたはAsyncTask

はここに私のコードです:

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

可能性のある重複した上でそれを初期化し、[GoogleマップAPI v2のでMapFragment上の複数のマーカーを表示する方法?](http://stackoverflow.com/questions/13855049/how-to-show-multiple-markers-on-mapfragment-in-google-map-api-v2) –

答えて

1

あなたが初期化されているあなたの各反復でmarkerPoints

がdo-whileループからmarkerPoints = new ArrayList<LatLng>();を削除し、宣言ArrayList<LatLng> markerPoints = new ArrayList<LatLng>();

+0

ああ、はい、忘れてしまいました。 –

+0

antonio、私のポイントは私のアプリを実行するとたくさんあり、アプリが遅すぎる。私は何ができますか?スレッドまたはAsyncTaskを使用する必要がありますか? –

+2

データベースを照会するために 'AsyncTask'を使用することができますが、残念なことにマーカー描画はメイン(UI)スレッド上で行われなければならず、非常に重い操作です。スピードを向上させる唯一の選択肢は、描画されるマーカー(マップ要素)の数を減らそうとすることです。たとえば、マーカークラスタリング(https://developers.google.com/maps/documentation/android-api/utility/marker-clustering) – antonio

関連する問題