我收到此錯誤,但找不到原因。我嘗試從 Firebase 檢索經緯度。這是我的 Java 類代碼:
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMarkerClickListener {
private GoogleMap mMap;
FirebaseFirestore db;
private DatabaseReference mUsers;
private ChildEventListener mChildEventListener;
Marker marker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// initializing our firebase firestore.
db = FirebaseFirestore.getInstance();
// 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);
ChildEventListener mChildEventListener;
mUsers = FirebaseDatabase.getInstance().getReference("Locations");
mUsers.push().setValue(marker);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
googleMap.setOnMarkerClickListener(this);
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
mUsers.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(snapshot.exists()) {
for (DataSnapshot dataSnapshot:snapshot.getChildren()) {
MapAdapter mapAdapter = dataSnapshot.getValue(MapAdapter.class);
LatLng location = new LatLng(mapAdapter.latitude, mapAdapter.longitude);
mMap.addMarker(new MarkerOptions().position(location)).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public boolean onMarkerClick(Marker marker) {
return false;
}
}
這是我的配接器代碼:
public class MapAdapter {
public Long latitude,longitude ;
public MapAdapter() {
}
public Long getLatitude() {
return latitude;
}
public void setLatitude(Long latitude) {
this.latitude = latitude;
}
public Long getLongitude() {
return longitude;
}
public void setLongitude(Long longitude) {
this.longitude = longitude;
}
}

為了解決這個問題,你要么將資料庫中欄位的型別更改為數字,而代碼保持原樣,要么MapAdapter像這樣更改類:
public class MapAdapter {
public String latitude, longitude;
public MapAdapter() {}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
}
您還可以像這樣更改代碼:
MapAdapter mapAdapter = dataSnapshot.getValue(MapAdapter.class);
long latitude = Long.parseLong(mapAdapter.latitude);
long longitude = Long.parseLong(mapAdapter.longitude);
LatLng location = new LatLng(latitude, longitude);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/368325.html
