【发布时间】:2022-06-10 19:48:36
【问题描述】:
我必须确保用户添加的标记也对谷歌地图活动中的所有其他用户可见。我尝试这样做,但地图上什至没有显示标记,代码没有给出我有任何错误,我该如何解决?如果你愿意,我可以给你我的 github 以便更好地理解
地图活动
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = FragmentsTrovamicoBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Log.d(TAG, "String addreess: " + addresses);
addresses = new ArrayList<>();
genders = new ArrayList<>();
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String address = (String) snapshot.child("address").getValue();
Log.d(TAG, "String address: " + addresses);
String gender = (String) snapshot.child("gender").getValue();
Log.d(TAG, "String gender: " + gender);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException(); // never ignore errors
}
};
reference.addListenerForSingleValueEvent(eventListener);
// 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);
}
@Override
public void onMapReady(GoogleMap googleMap) {
for (int i = 0; i < addresses.size(); i++) {
String user_address = addresses.get(i);
if (!user_address.equals("To be added")) {
Log.d(TAG, "String addreess: " + addresses);
String user_gender = genders.get(i);
latLng = getLocationFromAddress(user_address);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
markerOptions.title("You");
Log.d(TAG, "String addreess: " + addresses);
markerOptions.icon(BitmapFromVector(getApplicationContext(), (user_gender.equals("Male")) ? R.drawable.male : R.drawable.female));
googleMap.clear();
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 5));
googleMap.addMarker(markerOptions);
}
}
}
public LatLng getLocationFromAddress(String strAddress) {
Geocoder coder = new Geocoder(this);
List<Address> address;
LatLng p1;
try {
address = coder.getFromLocationName(strAddress, 5);
if (address == null) {
return null;
}
Address location = address.get(0);
p1 = new LatLng(location.getLatitude(), location.getLongitude());
return p1;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
添加地址
add_address.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText editText = new EditText(requireContext());
alertDialog = new AlertDialog.Builder(requireContext());
alertDialog.setView(editText);
alertDialog.setTitle("Address");
alertDialog.setPositiveButton("Ok", (dialogInterface, i) -> {
String address = editText.getText().toString();
firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid()).child("address");
reference.setValue(address);
});
alertDialog.setNegativeButton("Cancel", null);
alertDialog.create().show();
}
});
【问题讨论】:
-
您似乎在反复问这个问题,所以虽然我理解您的沮丧,但这通常不是获得答案的最佳方法。就像我之前说的,firebase 不是同步的。您知道在调用 onMapReady 时您的数据是否已取回吗?您是否使用日志或断点来调试正在发生的事情?
标签: java android firebase firebase-realtime-database