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
TA贡献1831条经验 获得超10个赞
从 android O 你应该像这样开始你的服务:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intent);
}
else {
context.startService(intent);
}
在你的情况下FreshchatService。
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));
}
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));
}
添加回答
举报