Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Android 使用UID从Firebase检索位置并放入Google地图_Android_Google Maps_Firebase_Firebase Realtime Database_Google Api - Fatal编程技术网

Android 使用UID从Firebase检索位置并放入Google地图

Android 使用UID从Firebase检索位置并放入Google地图,android,google-maps,firebase,firebase-realtime-database,google-api,Android,Google Maps,Firebase,Firebase Realtime Database,Google Api,我正试图从Firebase保存和检索一个位置,并将其放入谷歌地图。纬度和经度值位于用户id下,因为它将用于特定用户的位置。保存位置成功,但我无法检索它。我正试图找回它,但我一直在找它 java.lang.NullPointerException:尝试调用虚拟方法 空对象引用上的“double java.lang.double.doubleValue()” 错误 有什么办法可以解决这个问题吗?谢谢你 以下是保存位置的代码: profDatabase = FirebaseDatabase.g

我正试图从
Firebase
保存和检索一个位置,并将其放入谷歌地图。纬度和经度值位于用户id下,因为它将用于特定用户的位置。保存位置成功,但我无法检索它。我正试图找回它,但我一直在找它

java.lang.NullPointerException:尝试调用虚拟方法 空对象引用上的“double java.lang.double.doubleValue()” 错误

有什么办法可以解决这个问题吗?谢谢你

以下是保存位置的代码:

    profDatabase = FirebaseDatabase.getInstance().getReference().child("Profile");

       if (auth.getCurrentUser() != null){

                    String userid = auth.getCurrentUser().getUid();
                    final DatabaseReference locDatabase = FirebaseDatabase.getInstance()
                            .getReferenceFromUrl("https://sholoco-9cf1e.firebaseio.com/Profile/" + userid);

                    profDatabase.child(userid).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            String stallname = dataSnapshot.child("StallName").getValue().toString();

                            Marker marker = mMap.addMarker(new
                                    MarkerOptions().position(point).title(stallname));
                            final LatLng latlng = marker.getPosition();

                            mSaveButton.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    //DatabaseReference newPost = profDatabase.push();
                                    //newPost.setValue(latlng);

                                    String latkey = "latitude";
                                    double latvalue = latlng.latitude;
                                    DatabaseReference child = locDatabase.child(latkey);
                                    child.setValue(latvalue);

                                    String longkey = "longitude";
                                    double longvalue = latlng.longitude;
                                    child = locDatabase.child(longkey);
                                    child.setValue(longvalue);
                                }
                            });
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
profDatabase = FirebaseDatabase.getInstance().getReference().child("Profile");
        if (auth.getCurrentUser() != null) {

            String userid = auth.getCurrentUser().getUid();
            profDatabase.child(userid).addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    double latt = (double) dataSnapshot.child("latitude").getValue();
                    double longg = (double) dataSnapshot.child("longitude").getValue();
                    String stallname = dataSnapshot.child("StallName").getValue().toString();

                    LatLng newLocation = new LatLng(latt, longg);

                    mMap.addMarker(new MarkerOptions()
                            .position(newLocation)
                            .title(stallname));
                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
以下是我检索位置的代码:

    profDatabase = FirebaseDatabase.getInstance().getReference().child("Profile");

       if (auth.getCurrentUser() != null){

                    String userid = auth.getCurrentUser().getUid();
                    final DatabaseReference locDatabase = FirebaseDatabase.getInstance()
                            .getReferenceFromUrl("https://sholoco-9cf1e.firebaseio.com/Profile/" + userid);

                    profDatabase.child(userid).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            String stallname = dataSnapshot.child("StallName").getValue().toString();

                            Marker marker = mMap.addMarker(new
                                    MarkerOptions().position(point).title(stallname));
                            final LatLng latlng = marker.getPosition();

                            mSaveButton.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    //DatabaseReference newPost = profDatabase.push();
                                    //newPost.setValue(latlng);

                                    String latkey = "latitude";
                                    double latvalue = latlng.latitude;
                                    DatabaseReference child = locDatabase.child(latkey);
                                    child.setValue(latvalue);

                                    String longkey = "longitude";
                                    double longvalue = latlng.longitude;
                                    child = locDatabase.child(longkey);
                                    child.setValue(longvalue);
                                }
                            });
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
profDatabase = FirebaseDatabase.getInstance().getReference().child("Profile");
        if (auth.getCurrentUser() != null) {

            String userid = auth.getCurrentUser().getUid();
            profDatabase.child(userid).addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    double latt = (double) dataSnapshot.child("latitude").getValue();
                    double longg = (double) dataSnapshot.child("longitude").getValue();
                    String stallname = dataSnapshot.child("StallName").getValue().toString();

                    LatLng newLocation = new LatLng(latt, longg);

                    mMap.addMarker(new MarkerOptions()
                            .position(newLocation)
                            .title(stallname));
                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
我的数据库中的屏幕截图:


您是否尝试过使用
addListenerForSingleValueEvent()
代替
addChildEventListener()

要获取不带用户ID的值,请执行以下操作: 提及


您不需要将纬度和经度输入到
double
,而是将
double.class
作为参数传递到
getValue()

请参阅此代码的工作原理

    @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference locationsRef = rootRef.child("childName");
    final GeoFire geoFire = new GeoFire(locationsRef);
        geoFire.getLocation("dataKey", new LocationCallback() {
            @Override
            public void onLocationResult(String key, GeoLocation location) {
                double lat =location.latitude;
                double lng =location.longitude;
                LatLng sydney = new LatLng(lng, lat);
                mMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.defaultMarker(HUE_BLUE)).position(sydney).title("car"));
                Toast.makeText(getApplicationContext(),""+sydney,Toast.LENGTH_SHORT).show();
                mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
                mMap.animateCamera(CameraUpdateFactory.zoomTo(9));
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    mMap = googleMap;
    mMap.setMyLocationEnabled(true);
    buildGoogleApiClient();

}

这实际上是我的第一个代码,但它仍然不起作用。顺便问一下,什么意思是将数据存储在列表中?(对不起,我问了很多)我删除了没有位置的其他用户,并留下了有位置的用户,它工作了。但我在创建并尝试保存位置时出错。当我尝试保存另一个用户的位置时,应用程序崩溃,并出现以下错误:java.lang.NullPointerException:尝试调用虚拟方法'double java.lang.double.doubleValue()'在此行的空对象引用上(使用userid):
double latt=(double)dataSnapshot.child(“纬度”).getValue();