我制作了一个应用程序,可让您将电话号码注册到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