java如何显示firebase数据库中的所有标记?
如何显示firebase数据库中的所有标记
我已将以下表格中的数据输入数据库:
但仅显示图形中高亮显示的内容!我这样写代码:
@Override
public void onMapReady(GoogleMap googleMap) {
if (!isOnline() && !isNetworkAvailable()) {
} else {
Map1 = googleMap;
Map1.setMapType(GoogleMap.MAP_TYPE_NORMAL);
Map1.setMapStyle(mapStyleOptions);
Map1.setOnMyLocationButtonClickListener(this);
Map1.setOnMyLocationClickListener(this);
if (Map1 == null) {
Map1.setMyLocationEnabled(true);
}
startCurrentLocationUpdates();
mHandler.postDelayed(new Runnable(){
public void run(){
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("Markers");
Map.clear();
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()) {
String latitude = ds.child("latitude").getValue().toString();
String longitude = ds.child("longitude").getValue().toString();
String bus = ds.child("bus_station").getValue().toString();
Log.d("TAG", latitude + ", " + longitude);
LatLng location = new LatLng(Double.parseDouble(latitude), Double.parseDouble(longitude));
Map.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.img_4662878)).position(location).title(bus));
}}}}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
mHandler.postDelayed(this, delay);
}
}, delay);
}}
告诉我如何正确显示数据库中的所有标记
错误:
2020-04-22 23:10:12.031 18972-18972/by.sviter.stop E/AndroidRuntime: FATAL EXCEPTION: main
Process: by.sviter.stop, PID: 18972
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at by.sviter.stoprevizor.tabs.maps.MapsFragment$3$1.onDataChange(MapsFragment.java:337)
at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@19.2.1:179)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.1:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.1:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.1:55)
at 安卓.os.Handler.handleCallback(Handler.java:873)
at 安卓.os.Handler.dispatchMessage(Handler.java:99)
at 安卓.os.Looper.loop(Looper.java:193)
at 安卓.app.ActivityThread.main(ActivityThread.java:6718)
at java.lang.reflect.Method.invoke(Native Method)
at com.安卓.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:858)
# 1 楼答案
对于SingleValueEvent,您应该使用addValueEventListner而不是AddListener
您必须运行for循环以获取所有数据,如
DatabaseReference rootRef=FirebaseDatabase。getInstance()。getReference(); rootRef。子(“标记”)。addValueEventListner(新的ValueEventListner{
@覆盖 公共void onDataChange(DataSnapshot DataSnapshot){ 对于(DataSnapshot快照:DataSnapshot.getChildern()){ 加入你的模范班 } }
})
# 2 楼答案
假设
dn4O ... mgG2
是经过身份验证的用户的uid
,要获取纬度和经度属性的值,请使用以下代码行:logat中的结果将是:
编辑:
根据你的评论:
请使用以下代码行:
logcat中的结果将是:
# 3 楼答案
在DataSnapshot for loop的作用域结束后,可以使用本应实现的getter和setter操作DataModel对象的内容
如果这不起作用。检查mMarkers1对象是否指向正确的类,或者将addListenerForSingleValueEvent更改为addValueEventListener