从 Firebase 检索位置数据未进入 MapActivity
Posted
技术标签:
【中文标题】从 Firebase 检索位置数据未进入 MapActivity【英文标题】:Retrieve location data from Firebase not getting on MapActivity 【发布时间】:2020-11-16 14:18:27 【问题描述】:所以,我想从我的数据库参考路径“驱动程序位置”中获取latitude
和longitude
。但是,它什么也没发生,只是显示正常的谷歌地图而不触发位置。请帮忙!
public class StudentMapActivity extends FragmentActivity implements OnMapReadyCallback
private GoogleMap mMap;
private DatabaseReference databaseReference;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_student_map);
FirebaseDatabase database = FirebaseDatabase.getInstance();
databaseReference = database.getReference("Driver Location");
// 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(final GoogleMap googleMap)
mMap = googleMap;
databaseReference.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
for (DataSnapshot child : dataSnapshot.getChildren())
String lat = child.child("latitude").getValue().toString();
String lng = child.child("longitude").getValue().toString();
double latitude = Double.parseDouble(lat);
double longitude = Double.parseDouble(lng);
LatLng latLng = new LatLng(latitude, longitude);
MarkerOptions markerOptions = new MarkerOptions()
.position(latLng)
.title("Bus is here");
mMap.addMarker(markerOptions);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16));
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
);
Logcat:
2020-07-24 00:41:18.926 22586-22586/com.example.upmbus D/InputTransport: Input channel destroyed: '1df605 ', fd=100
2020-07-24 00:41:18.939 22586-23234/com.example.upmbus W/.example.upmbu: Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, linking, allowed)
2020-07-24 00:41:18.940 22586-23234/com.example.upmbus W/.example.upmbu: Accessing hidden method Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V (greylist, linking, allowed)
2020-07-24 00:41:18.942 22586-23234/com.example.upmbus W/.example.upmbu: Accessing hidden method Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)
2020-07-24 00:41:18.942 22586-23234/com.example.upmbus W/.example.upmbu: Accessing hidden method Lsun/misc/Unsafe;->getInt(Ljava/lang/Object;J)I (greylist, linking, allowed)
附加的数据库详细信息
【问题讨论】:
@AlexMamo 你能帮帮我吗? 嗨,诺贝尔,但问题是什么?这段代码中究竟有什么不符合您的预期? 地图打开但没有得到位置值也没有放置任何标记,只是一张普通地图@AlexMamo 我已成功存储经纬度,但使用提供的代码avobe无法检索。 请将您的数据库结构添加为 JSON 文件或至少是屏幕截图。 【参考方案1】:没有必要循环遍历DataSnapshot
对象,因为那里只有两个属性,并且都可以像下面的代码行一样直接访问:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference driverLocationRef = rootRef.child("Driver Location");
ValueEventListener valueEventListener = new ValueEventListener()
@Override
public void onDataChange(DataSnapshot dataSnapshot)
double latitude = dataSnapshot.child("latitude").getValue(Double.class);
double longitude = dataSnapshot.child("longitude").getValue(Double.class);
Log.d("TAG", latitude + ", " + longitude);
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
;
driverLocationRef.addListenerForSingleValueEvent(valueEventListener);
logcat 中的结果将是:
3.0227801, 101.71208
除此之外,使用:
String lng = child.child("longitude").getValue().toString();
没有任何意义,因为这两个属性都持有一个双精度值,而不是一个字符串。
【讨论】:
com.example.upmbus D/androidRuntime:关闭 VM com.example.upmbus E/AndroidRuntime:致命异常:主进程:com.example.upmbus,PID:31676 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“double java.lang.Double.doubleValue()” com.example.upmbus.StudentMapActivity$1.onDataChange(StudentMapActivity.java:79) 在 com.google.firebase.database.Query$1.onDataChange(Query.java:179) 在 com.google。 firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75) 在 com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63) 在 com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android。 os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:237) 在 android.app.ActivityThread.main(ActivityThread.java:7948) 在 java.lang.reflect.Method .invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075) 请编辑您的问题并添加您正在使用的确切代码。 嗨,诺贝尔!你解决了问题吗?如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记(✔️)来接受它。应将颜色更改为绿色。我真的很感激。谢谢!以上是关于从 Firebase 检索位置数据未进入 MapActivity的主要内容,如果未能解决你的问题,请参考以下文章
Firebase GeoFire,从我当前位置检索具有特定半径的帖子
使用 Android Studio 从 Firebase 中的某个位置检索数据