【问题标题】:Firestore cloud new document created everytime when code runs每次代码运行时都会创建 Firestore 云新文档
【发布时间】:2018-07-13 09:08:35
【问题描述】:

每当从应用程序将位置发送到 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);
                        }
                    }); ...
}

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

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

    public Task&lt;DocumentReference&gt; add (Object pojo)

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

    您需要改用set()

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

    也检查一下:

    Firestore: set() & add()

    【讨论】:

    • 谢谢@Peter。还有一个问题,如果我使用 set 我需要手动创建文档吗?​​
    • 您可以在代码中创建文档,无需在控制台中编写(如答案)
    猜你喜欢
    • 2015-09-18
    • 2011-01-20
    • 2021-10-23
    • 1970-01-01
    • 2014-01-15
    • 2020-05-18
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    相关资源
    最近更新 更多