为了账号安全,请及时绑定邮箱和手机立即绑定

位置未显示在地图上

位置未显示在地图上

哆啦的时光机 2023-06-08 20:09:17
我试图通过从 Firebase 实时数据库中检索 Double 值来显示地图上的位置。但是当我启动地图活动时,当 Firebase 中存储了一个 Double 值时,位置位于 0.0,0.0。我尝试了不同的代码来检索位置,但它们都没有在地图上显示正确的位置。感谢任何帮助。
查看完整描述

4 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

无需DataSnapshot使用方法遍历对象getChildren(),只需使用以下代码行即可:


DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

DatabaseReference busRef = rootRef.child("Locations").child("BUS11");

ValueEventListener valueEventListener = new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot ds) {

        double lat = ds.child("latitude").getValue(Double.class);

        double lng = ds.child("longitude").getValue(Double.class);

        LatLng latLng = new LatLng(lat, lng);

        mMap.addMarker(new MarkerOptions().position(latLng).title("BUS11"));

        Log.d(TAG, lat + ", " + lng);

    }


    @Override

    public void onCancelled(@NonNull DatabaseError databaseError) {

        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!

    }

};

busRef.addListenerForSingleValueEvent(valueEventListener);

使用此代码的结果将是在您的地图上添加一个标记,并在 logcat 中打印以下行:


13.0641221, 80.2500812


查看完整回答
反对 回复 2023-06-08
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

从 android O 你应该像这样开始你的服务:


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    context.startForegroundService(intent);

}

else {

    context.startService(intent);

}

在你的情况下FreshchatService。


查看完整回答
反对 回复 2023-06-08
?
千巷猫影

TA贡献1829条经验 获得超7个赞

从 firebase 获取位置时,您没有刷新地图。您只是将位置存储在全局变量中


您的代码获取纬度和经度也是错误的。下面的代码应该工作


for (DataSnapshot snapm: dataSnapshot.getChildren()) {

     String key = snapm.getKey();

     if(key.equalsIgnoreCase("latitude")){

        lati=snapm.getValue(Double.class);

     }

     if(key.equalsIgnoreCase("longitude")){

        longi=snapm.getValue(Double.class);

     }

}    


 // add this code here

 if (mMap != null) {

   LatLng sydney = new LatLng(lati,longi);

   mMap.addMarker(new MarkerOptions().position(sydney).title(vali));

   mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

 }


查看完整回答
反对 回复 2023-06-08
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

对于 8.0 之前的设备,您必须只使用 startService(),但对于 7.0 之后的设备,您必须使用 startForgroundService()。这是启动服务的代码示例。


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

        context.startForegroundService(new Intent(context, ServedService.class));

    } else {

        context.startService(new Intent(context, ServedService.class));

}


查看完整回答
反对 回复 2023-06-08
  • 4 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信