首页 > 解决方案 > 每次代码运行时都会创建 Firestore 云新文档

问题描述

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

这是我的代码:-

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);
                        }
                    }); ...
}

标签: androidfirebasegoogle-cloud-firestore

解决方案


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

public Task<DocumentReference> add (Object pojo)

以指定的 POJO 作为内容向此集合添加一个新文档,并自动为其分配一个文档 ID。

您需要set()改用:

db.collection("cities").document("Locations")
    .set(location)
    .addOnSuccessListener(new OnSuccessListener<Void>() {

也检查一下:

Firestore:设置()和添加()


推荐阅读