Android - 从 Firebase 数据库中删除“活动”标记

Posted

技术标签:

【中文标题】Android - 从 Firebase 数据库中删除“活动”标记【英文标题】:Android - remove "active" marker from firebase database 【发布时间】:2019-02-02 01:50:38 【问题描述】:

我的项目有问题。 当我(例如)按下按钮进行删除时,我想删除特定的谷歌地图标记。但我想删除我将在我的应用程序中选择的标记,而不是所有标记。我的数据库是这样的:Firebase Database

我需要的一切是,如果我激活标记(可能是当我点击它时),我将能够从数据库和我的应用程序的地图中删除这个标记。添加标记的代码:

btnPridatKontejner = (Button)findViewById(R.id.btn_pridat_kontejner);
        btnPridatKontejner.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 

                    final AlertDialog.Builder dialog = new AlertDialog.Builder(Welcome.this);
                    dialog.setTitle("Přidat kontejner");
                    dialog.setMessage("Prosím, zadejte typ kontejneru pro přidání");

                    LayoutInflater inflater = LayoutInflater.from(Welcome.this);
                    View info_layout = inflater.inflate(R.layout.layout_info_map, null);

                    final MaterialEditText edtTypKontejneru = info_layout.findViewById(R.id.edtTypKontejneru);

                    dialog.setView(info_layout);

                    dialog.setPositiveButton("Přidat kontejner", new DialogInterface.OnClickListener() 
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) 
                            dialogInterface.dismiss();


                            final double latitude = mLastLocation.getLatitude();
                            final double longitude = mLastLocation.getLongitude();

                            MarkerOptions mp = new MarkerOptions();

                            long date = System.currentTimeMillis();

                            SimpleDateFormat sdf = new SimpleDateFormat("dd. MM. yyyy, k:mm");
                            String dateString = sdf.format(date);

                            mp.position(new LatLng(latitude, longitude));

                            mp.title(edtTypKontejneru.getText().toString());
                            mp.snippet(dateString);

                            mMap.addMarker(mp);

                            DatabaseReference markerRef = FirebaseDatabase.getInstance().getReference("markers");

                            String key = markerRef.push().getKey();

                            markerRef.child(key).child("long").setValue(longitude);
                            markerRef.child(key).child("lat").setValue(latitude);
                            markerRef.child(key).child("title").setValue(mp.getTitle());
                            markerRef.child(key).child("snippet").setValue(mp.getSnippet());

                            if (TextUtils.isEmpty(edtTypKontejneru.getText().toString()))
                                return;
                            
                        


                    );

                    dialog.setNegativeButton("Zavřít", new DialogInterface.OnClickListener() 
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) 
                            dialogInterface.dismiss();
                        
                    );

                    dialog.show();

            
        

这是我将标记从 Firebase 加载到我的应用程序的代码:

mMap = googleMap;
    //Disable Map Toolbar:
    //map.getUiSettings().setMapToolbarEnabled(false);

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference usersRef = rootRef
            .child("markers");

    ValueEventListener eventListener = new ValueEventListener() 
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) 

            for(DataSnapshot ds : dataSnapshot.getChildren()) 


                String latitude_Display = ds
                        .child("lat")
                        .getValue().toString();

                String longitude_Display = ds
                        .child("long")
                        .getValue().toString();

                String title_Display = ds
                        .child("title")
                        .getValue().toString();

                String info_Display = ds
                        .child("snippet")
                        .getValue().toString();



                String latLng = latitude_Display;
                String latLng1 = longitude_Display;
                String title = title_Display;
                String info = info_Display;


                double latitude = Double.parseDouble(latLng);
                double longitude = Double.parseDouble(latLng1);
                String titleInfo = title;
                String infoInfo = info;

                LatLng currentLocation = new LatLng( latitude, longitude );
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position( currentLocation );
                mMap.addMarker(new MarkerOptions()
                        .position(new LatLng(latitude, longitude))
                        .title(titleInfo).snippet(infoInfo));
            
        

        @Override
        public void onCancelled(DatabaseError databaseError) 
    ;
    usersRef.addListenerForSingleValueEvent(eventListener);

甚至有可能制作这样的东西吗?谢谢大家的回答。

【问题讨论】:

【参考方案1】:
void del(String key) 

    DatabaseReference usersRef = rootRef.child("markers").child(key).removeValue();

传递要删除的标记的键。

【讨论】:

有问题..我想删除任何标记,我将在以后创建..不仅仅是一个,我将在此处指定。 当您点击标记然后获取该标记的键并传入方法。 无法接收符号“key”..我认为,我将其粘贴在我的代码中是错误的.. 您在另一种方法中添加一种方法。所以,这就是你得到错误的原因。只需调用 onMarkerClick() 中的方法 del(key) 并在类中添加该方法即可。 我认为我只是个白痴。我现在明白了吗?因为我仍然遇到错误.. :/ 真的很抱歉,但我真的不知道该放在哪里.. :/ imgur.com/a/QpKtIcy

以上是关于Android - 从 Firebase 数据库中删除“活动”标记的主要内容,如果未能解决你的问题,请参考以下文章

发送数据时,从 Android 应用中的 Firebase 检索 ServerValue.Timestamp

无法从firebase数据库android,recycler视图中检索数据

如何根据 android 中的用户位置从 Firebase 数据库中检索数据?

如何使用 java/android 从 Firebase ONCE 读取数据?

Android - 从 Firebase 数据库中删除“活动”标记

Android:从firebase查询附近的位置