【发布时间】:2020-11-06 09:54:19
【问题描述】:
我知道这个问题被认为是类似的问题,但是,我真的无法解决,我只是想学习 android 的新手。
因此,预期的结果是有一项活动,即谷歌地图,以允许用户自己查看他们的 SavedPlace。所以我的云 Firestore 结构现在看起来像这样:
然后,在我的代码中,到目前为止我所做的是:
public class FoodShareActivity extends AppCompatActivity {
@BindView(R.id.toolbar)
Toolbar mtoolbar;
SupportMapFragment supportMapFragment;
FusedLocationProviderClient client;
private ChildEventListener mChildEventListener;
private DatabaseReference mDataRef;
Marker marker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_food_share);
ButterKnife.bind(this);
setSupportActionBar(mtoolbar);
getSupportActionBar().setTitle("FoodShare");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_baseline_keyboard_backspace_24);
supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.google_map);
client = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(FoodShareActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
getCurrentLocation();
} else {
ActivityCompat.requestPermissions(FoodShareActivity.this, new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,}, 44
);
}
ChildEventListener mChildEventListener;
// mDataRef.push().setValue(marker);
}
private void getCurrentLocation() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Task<Location> task = client.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if(location != null){
supportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng latLng = new LatLng(location.getLatitude(),
location.getLongitude());
MarkerOptions options = new MarkerOptions().position(latLng).title("Im hrer");
googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,17.0f));
googleMap.addMarker(options);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("SavedPlace");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
placeModel post = postSnapshot.getValue(placeModel.class);
MarkerOptions markerOptions = new MarkerOptions();
double lat = Double.parseDouble(String.valueOf(post.getLat()));
double lng = Double.parseDouble(String.valueOf(post.getLong()));
LatLng latLng = new LatLng(lat, lng);
markerOptions.position(latLng);
markerOptions.title(post.getPlaceName());
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
googleMap.addMarker(markerOptions);
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
googleMap.animateCamera(CameraUpdateFactory.zoomTo(12));
}
}
@Override
public void onCancelled(DatabaseError error) { }
});
}
});
}
}
});
}
@Override
public boolean onSupportNavigateUp() {
finish();
return false;
}
}
对于我的地方模特,
public class placeModel {
private String placeAddress;
private String placeDetails;
private String placeLatLong;
private String placeName;
private String placeNote;
double Lat;
double Long;
public placeModel(){
//empty constuctor needed
}
public placeModel(String placeAddress, String placeDetails, String placeLatLong, String placeName, String placeNote, double Lat, double Long) {
this.placeAddress = placeAddress;
this.placeDetails = placeDetails;
this.placeLatLong = placeLatLong;
this.placeName = placeName;
this.placeNote = placeNote;
this.Lat = Lat;
this.Long = Long;
}
public String getPlaceAddress() {
return placeAddress;
}
public String getPlaceName() { return placeName; }
public double getLat() {
Log.d("ga", "checkAA"+ Lat);
return Lat;
}
public double getLong() { return Long; }
public String getDetails() {
return placeDetails;
}
public String getLatLong() { return placeLatLong; }
public String getNote() { return placeNote; }
}
地图活动运行良好,并且能够看到我当前的位置。但是数据库中的位置标记不显示。
最终的结果是根据firebase的经纬度在谷歌地图上标记多个标记。
请帮帮我,我在这里呆了大约 2 天。
【问题讨论】:
-
However, the latitude and longitude from firebase does not work你能解释一下吗?它在做什么?它在做什么? -
很抱歉,所以,我的意思实际上是它不显示任何标记,除了当前位置。我实际上想要的是在firebase中拥有所有位置
-
如果您不将数据库中的名称更改为以小写字母开头,以及在您的班级中,您将无法使用
lat和long。您还可以使用注释,如 duplicate 中所述。 -
我改了,还是一样,只是那边什么都没发生。我也试过用Log.d调试,在这个页面运行不了Log。
标签: java android firebase google-maps