java - Firebase onDataChange - 空对象引用
问题描述
我想问是否有人可以为我解决这个问题..因为我一直在寻找并尝试自己解决它但是..不..
这是我的 logcat 错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.app.mk.transportrider, PID: 23152
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.app.mk.transportrider.Model.Rider.getName()' on a null object reference
at com.app.mk.transportrider.Home$5$1.onDataChange(Home.java:364)
at com.google.firebase.database.zzp.onDataChange(Unknown Source:7)
at com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown Source:13)
at com.google.android.gms.internal.firebase_database.zzgx.zzdr(Unknown Source:2)
at com.google.android.gms.internal.firebase_database.zzhd.run(Unknown Source:71)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
这是我的“代码”:
DatabaseReference driverLocation = FirebaseDatabase.getInstance().getReference(Common.driver_tbl);
GeoFire gf = new GeoFire(driverLocation);
GeoQuery geoQuery = gf.queryAtLocation(new GeoLocation(mLastLocation.getLatitude(), mLastLocation.getLongitude()), distance);
geoQuery.removeAllListeners();
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, final GeoLocation location) {
FirebaseDatabase.getInstance().getReference(Common.user_driver_tbl)
.child(key)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Same model *users* & *driver*
// using the ssame model ---
Rider rider = dataSnapshot.getValue(Rider.class);
mMap.addMarker(new MarkerOptions()
.position(new LatLng(location.latitude, location.longitude))
.flat(true)
.title(rider.getName())
.snippet("Phone: " + rider.getPhone())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.car)));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
(Home.java:364) 是行代码.title(rider.getName())
哦..如果还有其他东西我可以为您提供更多,您需要我会尽快发布。
请理解..我有点想自己弄这些东西,但是,没有办法..即使很简单,我也只是卡住了:( ..
谢谢你。
解决方案
在这行代码之前添加“if(dataSnapshot.exists())”..开始工作:)
Rider rider = dataSnapshot.getValue(Rider.class);
mMap.addMarker(new MarkerOptions()
.position(new LatLng(location.latitude, location.longitude))
.flat(true)
.title(rider.getName())
.snippet("Phone: " + rider.getPhone())
.icon(BitmapDescriptorFactory.fromResource(R.drawable.car)));
推荐阅读
- java - Glassifish 部署
- python - Python OpenCV - imshow 不需要从 BGR 转换为 RGB
- arrays - 在数组计算中替换 numpy 数组循环
- image-processing - Pytorch - 迁移学习教程中图像预处理的目的
- c# - 没有 api 和 unicode 的 C# Google 翻译
- sql-server - SQL Server 中的日期时间输入,Node.js 超出范围
- ssl - 在哪里安装 SSL?
- css - 如何通过角度边界值设置背景颜色
- botframework - 使用 botframework rest-api 将 .txt、.pdf 或 zip 文件附加到 Skype 机器人
- c# - 石英调度程序作业未触发?