Как вывести маркеры из базы данных SQLite в MapView и Google Map - PullRequest
1 голос
/ 19 мая 2019

Я установил свой код, чтобы, когда пользователь переходит к фрагменту карты, он отображал карту со всеми маркерами в базе данных. У меня есть два фиктивных маркера, и они работают, но те из моей базы данных не отображаются.

Я убедился, что 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 Ответ

3 голосов
/ 19 мая 2019

Стоит ли пропустить первый ряд?Это единственная строка, которая будет возвращена?

Возможно, причина, по которой ведение журнала не работает согласно комментарию: -

, по какой-то причине я поместил журналы весли заявление и в подвохе, но я не могу их найти.Означает ли это, что оба они не срабатывают?

Возможно, вам следует попробовать (удалив if (csr.moveToFirst()), который пропустит первый ряд), используя: -

          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);
              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();
          }

Я бы тожебросьте упаковку кода в предложении try / catch, возможно, вы скрываете проблемы.

...