android - 使用 UID 从 Firebase 检索位置并放入 Google map

标签 android google-maps firebase firebase-realtime-database google-api

我正在尝试从 Firebase 保存和检索位置并将其放入 Google map 。纬度和经度值在用户标识下,因为它将用于特定用户的位置。保存位置成功,但我无法检索它。我正在尝试检索它,但我不断收到

java.lang.NullPointerException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference" error.

有什么方法可以解决或做到这一点?提前谢谢你。

这是保存位置的代码:

    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) {

                }
            });
        }

我的数据库截图:

firebase database screenshot

最佳答案

您是否尝试过使用 addListenerForSingleValueEvent() 而不是 addChildEventListener()

获取没有userid的值: 引用https://stackoverflow.com/a/46651960/4653447

 FirebaseDatabase.getInstance().getReference().child("Profile").addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot dataSnapshot) {
         for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
            double latt = (double) snapshot.child("latitude").getValue();
            double longg = (double) snapshot.child("longitude").getValue();
           //store this data in list
         }
    }

关于android - 使用 UID 从 Firebase 检索位置并放入 Google map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664498/

相关文章:

ios - Firebase:如何将设备 token 转换为 FCM token

java - 当我尝试运行我的Android应用程序时,Gradle失败,原因为空白

Android:使用谷歌地图实时获取当前坐标

javascript - 谷歌地图上每个 geojson 的多个信息窗口

android - Android项目中的C++ Firebase链接错误

Firebase 函数 - 生成和托管静态网页

android - 需要帮助获得自定义布局以使用我的 Android AlertDialog

android - Android中这两种拍照方式有什么区别?

php - 在 android 应用程序和 php 服务器中使用 http get/post 请求时出现文本编码错误?

javascript - 谷歌地图 : update image overlay