如何将标记从SQLite数据库输出到MapView和Google Map

时间:2019-05-19 10:32:26

标签: android sqlite android-sqlite

我已经设置了代码,因此当用户移至地图片段时,它将显示一个包含数据库中所有标记的地图。我有两个虚拟标记,它们可以工作,但是我数据库中的两个虚拟标记不显示。

我确保SQL查询正确无误,并尝试添加静态标记,但动态标记不会显示。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.map,container,false);
    mapView = (MapView) rootView.findViewById(R.id.mapView);
    mapView.onCreate(savedInstanceState);
    mapView.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            Log.i("DEBUG", "onMapReady");
            map = googleMap;
            LatLng sydney = new LatLng(-34, 151);
            LatLng paris = new LatLng(12,-40);
            map.addMarker(new 
            MarkerOptions().position(sydney).title("Marker in Sydney"));
            map.addMarker(new 
            MarkerOptions().position(paris).title("Marker in Ocean"));
              try {
                  String sql = "SELECT 
                         marker.markerLat,marker.markerLon,marker.markerDate 
                        FROM marker LEFT JOIN tripMarker ON" +
                         " marker.markerID = tripMarker.markerID LEFT 
                         JOIN userTrip ON userTrip.tripID = 
                         tripMarker.tripID " +
                       "WHERE userTrip.userID = '" + User.UserLoggedOn 
                         + "';";
                  Cursor cursor = db.rawQuery(sql, null);
                  if ( cursor.moveToFirst() ) {
                      while (cursor.moveToNext()) {
                          double lat = 
                       cursor.getDouble(cursor.getColumnIndex("markerLat"));
                          System.out.println(lat);
                          double lon = 
                       cursor.getDouble(cursor.getColumnIndex("markerLon"));
                          System.out.println(lon);
                          LatLng latLng = new LatLng(lat, lon);
                          MarkerOptions markerOptions = new 
                          MarkerOptions();
                          markerOptions.position(latLng);                        
                         map.addMarker(markerOptions.title(cursor.getString(
                          cursor.getColumnIndex("markerDate"))));
                      }
                  }
              }catch (Exception e){
                  e.printStackTrace();
              }
        }
    });
    return rootView;
    }

这是我的片段XML

<com.google.android.gms.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
class="com.google.android.gms.maps.SupportMapFragment" />

1 个答案:

答案 0 :(得分:3)

您应该跳过第一行吗?是唯一会返回的行吗?

也许是注释中记录不起作用的原因:-

  

由于某种原因,我将日志放入了if语句和   抓住,但我似乎找不到它们。这是否意味着他们都不   触发?

也许您应该尝试使用以下方法(删除class Genre(models.Model): name = models.CharField(max_length=200, help_text='Enter a book genre (e.g. Science Fiction)') class Book(models.Model): genre = models.ManyToManyField(Genre, help_text='Select a genre for this book') 会跳过第一行):-

if (csr.moveToFirst())

我还会将代码包装在try / catch子句中,这很可能隐藏了问题。