Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Firebase检索位置数据未在MapActivity上获取_Java_Android_Firebase_Google Maps_Firebase Realtime Database - Fatal编程技术网

Java 从Firebase检索位置数据未在MapActivity上获取

Java 从Firebase检索位置数据未在MapActivity上获取,java,android,firebase,google-maps,firebase-realtime-database,Java,Android,Firebase,Google Maps,Firebase Realtime Database,因此,我试图从数据库引用路径“Driver Location”中获取纬度和经度。但是,它只会显示普通的谷歌地图,而不会触发定位。请帮忙 public class StudentMapActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; private DatabaseReference databaseReference; @Override

因此,我试图从数据库引用路径“Driver Location”中获取
纬度
经度
。但是,它只会显示普通的谷歌地图,而不会触发定位。请帮忙

public class StudentMapActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    private DatabaseReference databaseReference;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_student_map);
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        databaseReference = database.getReference("Driver Location");

        // 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);


    }


    @Override
    public void onMapReady(final GoogleMap googleMap) {
        mMap = googleMap;
        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot child : dataSnapshot.getChildren()) {
                    String lat = child.child("latitude").getValue().toString();
                    String lng = child.child("longitude").getValue().toString();

                    double latitude = Double.parseDouble(lat);
                    double longitude = Double.parseDouble(lng);
                    LatLng latLng = new LatLng(latitude, longitude);
                    MarkerOptions markerOptions = new MarkerOptions()
                            .position(latLng)
                            .title("Bus is here");
                    mMap.addMarker(markerOptions);
                    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16));
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


    }

}
日志:

2020-07-24 00:41:18.926 22586-22586/com.example.upmbus D/InputTransport: Input channel destroyed: '1df605 ', fd=100
2020-07-24 00:41:18.939 22586-23234/com.example.upmbus W/.example.upmbu: Accessing hidden method Lsun/misc/Unsafe;->getLong(Ljava/lang/Object;J)J (greylist,core-platform-api, linking, allowed)
2020-07-24 00:41:18.940 22586-23234/com.example.upmbus W/.example.upmbu: Accessing hidden method Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V (greylist, linking, allowed)
2020-07-24 00:41:18.942 22586-23234/com.example.upmbus W/.example.upmbu: Accessing hidden method Lsun/misc/Unsafe;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; (greylist, linking, allowed)
2020-07-24 00:41:18.942 22586-23234/com.example.upmbus W/.example.upmbu: Accessing hidden method Lsun/misc/Unsafe;->getInt(Ljava/lang/Object;J)I (greylist, linking, allowed)
数据库详情见附件


无需循环通过
DataSnapshot
对象,因为您在其中只有两个属性,并且可以像以下代码行那样直接访问这两个属性:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference driverLocationRef = rootRef.child("Driver Location");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        double latitude = dataSnapshot.child("latitude").getValue(Double.class);
        double longitude = dataSnapshot.child("longitude").getValue(Double.class);
        Log.d("TAG", latitude + ", " + longitude);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore errors!
    }
};
driverLocationRef.addListenerForSingleValueEvent(valueEventListener);
logcat中的结果将是:

3.0227801, 101.71208
除此之外,使用:

String lng = child.child("longitude").getValue().toString();

没有任何意义,因为两个属性都有一个双值,而不是一个字符串。

@AlexMamo你能帮我吗?嗨,诺贝尔,但问题是什么?这段代码中到底有什么东西没有按您期望的方式工作?地图会打开,但不会获取位置值,也不会放置任何标记,仅一个普通地图@AlexMamoI已成功存储纬度和经度,但无法使用提供的代码avobe检索它。请将您的数据库结构添加为JSON文件,或至少添加一个screenshot.com.example.upmbus D/AndroidRuntime:shutdown VM com.example.upmbus E/AndroidRuntime:FATAL EXCEPTION:main Process:com.example.upmbus,PID:31676 java.lang.NullPointerException:尝试在com.google.firebase.database.Query$1.onDataChange(Query.java:179)上的null对象referencecom.example.upmbus.StudentMapActivity$1.onDataChange(StudentMapActivity.java:79)上调用虚拟方法“double java.lang.double.doubleValue()”位于com.google.firebase.database.core.ValueEventRegistration.firevent(ValueEventRegistration.java:75)位于com.google.firebase.DataEvent.fire(DataEvent.java:63)位于com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)位于android.os.Handler.handleCallback(Handler.java:883)android.app.ActivityThread.main(ActivityThread.java:7948)的android.os.Handler.dispatchMessage(Handler.java:100)的android.os.Looper.loop(Looper.java:237)的java.lang.reflect.Method.invoke(本机方法)的com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)上,请编辑您的问题并添加您正在使用的确切代码。您好!你解决问题了吗?如果你认为我的答案对你有帮助,请考虑通过点击复选来接受它。✔️) 在投票箭头的左边。应该换成绿色。我真的很感激。谢谢!