Android 每次代码运行时都会创建Firestore云新文档

Android 每次代码运行时都会创建Firestore云新文档,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,每当该位置从应用程序发送到Firestore cloud时,它每次都会创建一个新文档。我只希望更改发生在已更改的文档字段中 以下是我的代码:- LocationManager locationManager; LocationListener locationListener; @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int

每当该位置从应用程序发送到Firestore cloud时,它每次都会创建一个新文档。我只希望更改发生在已更改的文档字段中

以下是我的代码:-

LocationManager locationManager;
LocationListener locationListener;

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if( grantResults.length > 0  && grantResults[0] == PackageManager.PERMISSION_GRANTED){
        if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60 , 0,locationListener);
    }

}

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


    locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    locationListener = new LocationListener() {

        @Override
        public void onLocationChanged(Location location) {

            Toast.makeText(MainActivity.this, location.toString(),Toast.LENGTH_LONG).show();



            FirebaseFirestore db = FirebaseFirestore.getInstance();

            db.collection("Location")
                    .add(location)
                    .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                        @Override
                        public void onSuccess(DocumentReference documentReference) {
                            Log.d("Info", "DocumentSnapshot added with ID: " + documentReference.getId());
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.w("Info", "Error adding document", e);
                        }
                    }); ...
}
LocationManager LocationManager;
LocationListener LocationListener;
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION\u已授予){
if(ContextCompat.checkSelfPermission(此,Manifest.permission.ACCESS\u FINE\u位置)==PackageManager.permission\u已授予)
locationManager.RequestLocationUpdate(locationManager.GPS_提供程序,60,0,locationListener);
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager=(locationManager)this.getSystemService(Context.LOCATION\u服务);
locationListener=新locationListener(){
@凌驾
已更改位置上的公共无效(位置){
Toast.makeText(MainActivity.this,location.toString(),Toast.LENGTH_LONG.show();
FirebaseFirestore db=FirebaseFirestore.getInstance();
db.收集(“地点”)
.添加(位置)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(文档引用文档引用){
Log.d(“Info”,“DocumentSnapshot添加了ID:”+documentReference.getId());
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.w(“信息”,“添加文档时出错”,e);
}
}); ...
}

它正在创建一个新文档,因为您正在使用:

公共任务添加(对象pojo)

将指定POJO作为内容的新文档添加到此集合,并自动为其分配文档ID

您需要改为使用:

db.集合(“城市”).文档(“位置”)
.set(位置)
.addOnSuccessListener(新的OnSuccessListener(){
也请检查此项:


谢谢@Peter。如果我使用set,还有一个问题,我需要手动创建文档吗?您可以在代码中创建文档,无需在控制台中编写(如答案中所示)
db.collection("cities").document("Locations")
    .set(location)
    .addOnSuccessListener(new OnSuccessListener<Void>() {