我想将 Latlng 值放入 Firebase 的 Google 地图中,但出现错误

Posted

技术标签:

【中文标题】我想将 Latlng 值放入 Firebase 的 Google 地图中,但出现错误【英文标题】:I want to put Latlng value In Google Maps from Firebase, but I am getting errors 【发布时间】:2019-02-16 02:14:34 【问题描述】:

我希望解决此问题,请帮助我解决此问题。 我正在使用 Resburrpi-3 将位置数据经度和纬度上传到 firebase,现在我想在 latlong 参考上的谷歌地图上使用 firebase 检索经度和纬度。

private DatabaseReference mReference;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // 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);



    mReference = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usersRef = mReference.child("Tezgam");
    usersRef.addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) 
            // This method is called once with the initial value and again
            // whenever data at this location is updated.

            for (DataSnapshot snapm: dataSnapshot.getChildren()) 

                latitude = snapm.child("lat").getValue(Long.class);
                longitude = snapm.child("long").getValue(Long.class);
                Speed = snapm.child("speed").getValue(String.class);
            
        

        @Override
        public void onCancelled(DatabaseError error) 
            // Failed to read value

        
    );




@Override
public void onMapReady(GoogleMap googleMap) 
    mMap = googleMap;

    // Add a marker in Sydney and move the camera
    LatLng sydney = new LatLng(latitude, longitude);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Tezgam\n Current location"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
`

【问题讨论】:

那么到底是什么问题呢?您是否收到任何错误消息并且可以共享堆栈跟踪?代码是否正在运行但未按预期工作?你一步步调试过吗? 请添加您的数据库结构。 【参考方案1】:

您的onMapReady() 方法可能在onDataChanged() 方法中的数据可用之前被触发。我假设您得到的错误类似于“纬度”和“经度”为空(假设,因为操作没有显示变量的声明方式)。这是一个竞争条件——一个方法在另一个方法提供数据之前完成。您必须适应缺失的数据。

所以像这样更改您的onMapReady() 代码:

@Override
public void onMapReady(GoogleMap googleMap) 
    mMap = googleMap;

    updateMapLocation();

并将您的快照代码更改为:

@Override
public void onDataChange(DataSnapshot dataSnapshot) 
    // This method is called once with the initial value and again
    // whenever data at this location is updated.

    for (DataSnapshot snapm: dataSnapshot.getChildren()) 
        latitude = snapm.child("lat").getValue(Long.class);
        longitude = snapm.child("long").getValue(Long.class);
        Speed = snapm.child("speed").getValue(String.class);

    updateMapLocation();
    

现在,添加updateMapLocation() 方法,该方法将检查纬度和经度值是否为空,否则显示位置:

private void updateMapLocation()
    if(latitude == null || longitude == null)
        Log.e("updateMapLocation", "latitude or longitude is null")
    
    else
        LatLng sydney = new LatLng(latitude, longitude);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Tezgam\n Current location"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    

【讨论】:

以上是关于我想将 Latlng 值放入 Firebase 的 Google 地图中,但出现错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用NodeJS中的firebase云功能从firebase实时数据库中找出最近的位置LatLng

如何将字符串从共享首选项转换为 MutableList<LatLng> 对以在 kotlin 中绘制折线?

我想将图像从 Firebase 加载到我的应用程序而不在 Firebase 中创建任何类别

离子: - 将字符串转换为纬度,经度在末尾追加更多数字?

如何在谷歌地图中找到前往某个区域的 LatLng?

Swift 3 中的 Firebase 多级数据库处理