如何从Android Studio上的Firestore获取文档ID

时间:2020-05-24 09:54:56

标签: java android firebase android-studio google-cloud-firestore

我制作了一个应用程序,可让您将电话号码注册到Firestore。我还想创建一个按钮来擦除我拥有的“联系人”集合中的所有现有文档。我创建了一个删除集合中某些文档的函数,但是该函数需要我打算从Firestore中提取的文档ID,但是我似乎无法做到这一点。 这是我的完整代码:

package com.example.numberlist;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FieldValue;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import com.google.firebase.firestore.model.Document;
import com.google.firebase.firestore.model.DocumentKey;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

import javax.annotation.Nullable;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private static final String KEY_TITLE = "Name";
    private static final String KEY_DESCRIPTION = "Phone Number";
    private static final String KEY_Country = "Country Code";

    public EditText Name; // editTextTitle
    public EditText Phone_Num; //editTextDescription
    public TextView CountryCode;
    public TextView textViewData; //textViewData
    Button send;

    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private CollectionReference numberRef = db.collection("Contacts");
    private DocumentReference noteRef = db.document("Contacts/Numbers");
    final int SEND_SMS_PERMISSION_REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Name = findViewById(R.id.Name);
        Phone_Num = findViewById(R.id.Phone_Num);
        CountryCode = findViewById(R.id.CountryCode);
        textViewData = findViewById(R.id.text_view_data);
        send = findViewById(R.id.sendtext);


        send.setEnabled(false);
        if (checkPermission(Manifest.permission.SEND_SMS)) {
            send.setEnabled(true);
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, SEND_SMS_PERMISSION_REQUEST_CODE);
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        numberRef.addSnapshotListener(this, new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                if(e!=null){
                    return;
                }
                String data = "";
                for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots){
                    Note note = documentSnapshot.toObject(Note.class);
                    note.setDocumentId(documentSnapshot.getId());
                    String documentId = note.getDocumentId();
                    String isim = note.getAd();
                    String numara = note.getNumara();


                    data +=  "Name: " + isim + "\nPhone Number: " + numara + "\n\n" + documentId;
                }
                textViewData.setText(data);
            }
        });

    }

    int i = 0;

    public void addNote(View v) {
        i += 1;
        if (i < 6) {
            String isim = Name.getText().toString();
            String Pho_num = Phone_Num.getText().toString();
            String country_code_text = CountryCode.getText().toString();
            //String description = Phone_Num.getText().toString();
            String complete_phone_number = "+" + country_code_text + Pho_num;
            Note note = new Note(isim, complete_phone_number);
            numberRef.add(note);
        }

    }

    public void sendtext(View v) {
        String Pho_num = Phone_Num.getText().toString();
        String country_code_text = CountryCode.getText().toString();
        String phoneNumber = "+" + country_code_text + Pho_num;
        String smsMessage = "GÜVENDEYİM";

        if (phoneNumber.length() == 1 || phoneNumber.length() == 0) {
            return;
        }
        if (checkPermission(Manifest.permission.SEND_SMS)) {
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(phoneNumber, null, smsMessage, null, null);
            Toast.makeText(this, "Message Sent", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
        }

    }

    public boolean checkPermission(String permission) {
        int check = ContextCompat.checkSelfPermission(this, permission);
        return (check == PackageManager.PERMISSION_GRANTED);
    }

    public void deleteNode(View v){
        for(int i = 0; i < 5; i++){
            db.collection("Contacts").document()
                    .delete()
                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            Log.d(TAG, "DocumentSnapshot successfully deleted!");
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.w(TAG, "Error deleting document", e);
                        }
                    });
        }

    }
}

如下面的代码片段所示,我需要将我的文档ID放入db.collection(“ Contacts”)。document(“”)字段中,以便删除我的文档,但是我似乎无法拉出来自Firestore的文档ID。

public void deleteNode(View v){
            db.collection("Contacts").document()
                    .delete()
                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            Log.d(TAG, "DocumentSnapshot successfully deleted!");
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.w(TAG, "Error deleting document", e);
                        }
                    });

    }

我只需要一个删除收藏夹中所有文档的函数,任何人都可以向我建议解决此问题的方法。

编辑:根据请求,这里是数据库的外观: the image on the top right is the ID

0 个答案:

没有答案