我正在尝试从 Firebase
保存和检索位置并将其放入 Google map 。纬度和经度值在用户标识下,因为它将用于特定用户的位置。保存位置成功,但我无法检索它。我正在尝试检索它,但我不断收到
java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference" error.
有什么方法可以解决或做到这一点?提前谢谢你。
这是保存位置的代码:
profDatabase = FirebaseDatabase.getInstance().getReference().child("Profile");
if (auth.getCurrentUser() != null){
String userid = auth.getCurrentUser().getUid();
final DatabaseReference locDatabase = FirebaseDatabase.getInstance()
.getReferenceFromUrl("https://sholoco-9cf1e.firebaseio.com/Profile/" + userid);
profDatabase.child(userid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String stallname = dataSnapshot.child("StallName").getValue().toString();
Marker marker = mMap.addMarker(new
MarkerOptions().position(point).title(stallname));
final LatLng latlng = marker.getPosition();
mSaveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//DatabaseReference newPost = profDatabase.push();
//newPost.setValue(latlng);
String latkey = "latitude";
double latvalue = latlng.latitude;
DatabaseReference child = locDatabase.child(latkey);
child.setValue(latvalue);
String longkey = "longitude";
double longvalue = latlng.longitude;
child = locDatabase.child(longkey);
child.setValue(longvalue);
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
这是我检索位置的代码:
profDatabase = FirebaseDatabase.getInstance().getReference().child("Profile");
if (auth.getCurrentUser() != null) {
String userid = auth.getCurrentUser().getUid();
profDatabase.child(userid).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
double latt = (double) dataSnapshot.child("latitude").getValue();
double longg = (double) dataSnapshot.child("longitude").getValue();
String stallname = dataSnapshot.child("StallName").getValue().toString();
LatLng newLocation = new LatLng(latt, longg);
mMap.addMarker(new MarkerOptions()
.position(newLocation)
.title(stallname));
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我的数据库截图:
最佳答案
您是否尝试过使用 addListenerForSingleValueEvent()
而不是 addChildEventListener()
?
获取没有userid
的值:
引用https://stackoverflow.com/a/46651960/4653447
FirebaseDatabase.getInstance().getReference().child("Profile").addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
double latt = (double) snapshot.child("latitude").getValue();
double longg = (double) snapshot.child("longitude").getValue();
//store this data in list
}
}
关于android - 使用 UID 从 Firebase 检索位置并放入 Google map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664498/