Android Studio中无法访问Firebase数据库且latlng返回null问题求助
问题排查与修复方案
核心错误原因
你当前代码的问题出在类型转换逻辑:Firebase Realtime Database中存储的经纬度默认是数值类型,你直接用getValue(String.class)读取会直接返回null,之后转Double自然会抛出异常,最终导致latlng列表没有正确添加数据。
修复步骤
- 第一步:先确认你的Firebase Realtime Database中
latlong节点下的子节点,确实存在latitude和longitude两个字段,且字段名拼写完全一致(大小写敏感),值为数值类型而非字符串包裹的格式 - 第二步:修改类型读取逻辑,直接读取Double类型,不需要先读String再转,完整示例代码如下:
mDatabase = FirebaseDatabase.getInstance().getReference().child("latlong"); mDatabase.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { progressDialog.dismiss(); // 每次回调先清空旧数据,避免重复添加 latlng.clear(); for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) { Log.i(TAG,postSnapshot.getValue().toString()); // 直接读取Double类型,不需要转String Double latitude = postSnapshot.child("latitude").getValue(Double.class); Double longitude = postSnapshot.child("longitude").getValue(Double.class); // 加空判断避免空指针崩溃 if (latitude != null && longitude != null) { LatLng n= new LatLng(latitude, longitude); latlng.add(n); } } // 这里可以添加你后续使用latlng列表的逻辑,比如刷新地图标记 } @Override public void onCancelled(DatabaseError databaseError) { // 不要忽略异常回调,打印错误方便排查 Log.e(TAG, "读取数据失败: " + databaseError.getMessage()); } });
- 第三步:如果确认你的经纬度在数据库中确实存的是字符串类型,需要先判断读取的字符串不为空再做转换:
String latStr = postSnapshot.child("latitude").getValue(String.class); String lngStr = postSnapshot.child("longitude").getValue(String.class); if (!TextUtils.isEmpty(latStr) && !TextUtils.isEmpty(lngStr)) { LatLng n = new LatLng(Double.parseDouble(latStr), Double.parseDouble(lngStr)); latlng.add(n); }
内容的提问来源于stack exchange,提问作者SriniRockzz
相关产品推荐
相关产品推荐

