Firebase Firestore генерирует два идентификатора вместо одного - PullRequest
0 голосов
/ 03 августа 2020

Я сохраняю некоторые данные в хранилище firebase и использую прослушиватель onComplete для операции. Я сохраняю сгенерированный мной идентификатор в строке и использую его для выполнения дальнейших операций.

 ProductRef = db.collection("Sellers").document(CityName).collection(Uid).document();
 ProductID =db.collection("Sellers").document(CityName).collection(Uid).document().getId();

Затем я использую этот сгенерированный идентификатор в качестве поля в облачном хранилище и добавляю в него некоторые изображения и после того, как он использует тот же идентификатор, я сохраняю URL-адреса этих изображений в хранилище огня, но происходит то, что между ними создается другой идентификатор, и детали хранятся внутри одного идентификатора и ImageUrls внутри другого.

Мой код

    private void UploadDetails() {
    
      ProductRef = db.collection("Sellers").document(CityName).collection(Uid).document();
                ProductID =db.collection("Sellers").document(CityName).collection(Uid).document().getId();
    
                HashMap<String, Object> map = new HashMap<>();
                map.put("City_Name", CityName);
    
      ProductRef.set(map, SetOptions.merge()).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        UploadingImage();
                        UploadingThumbnailImage();
                    }
                });
    }


private void UploadingImage() {

 resized = Bitmap.createScaledBitmap(bitmap, 800, 800, true);
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 resized.compress(Bitmap.CompressFormat.JPEG, 70, baos);
 byte[] uploadbaos = baos.toByteArray();

 ProductRef = db.collection("Sellers").document(CityName).collection(Uid).document(ProductID);

fileReference = storageReference.child(ProductID).child("1"  + ProductID + ".jpg");
 uploadTask = fileReference.putBytes(uploadbaos);

  uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                @Override
                public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                    if (!task.isSuccessful()) {
                        throw task.getException();
                    } else if (task.isSuccessful()) {
                        Toast.makeText(Upload_New_Product.this, "Uploaded Successfully", Toast.LENGTH_SHORT).show();
                        //mProgressBar.setVisibility(View.INVISIBLE);
                    }

                    return fileReference.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task) {
                    if (task.isSuccessful()) {
                        Uri downloadUri = task.getResult();
                        String mUri = downloadUri.toString();

                        // ProductRef=db.collection("Sellers").document().collection(ProductType);
                        ProductName = Product_Name_EditText.getText().toString();
                       // ProductRef = db.collection("Sellers").document(CityName).collection(Uid).document(ProductID);
                        //reference = FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("imageURL", mUri);
                        //reference.updateChildren(map);
                        ProductRef.set(map, SetOptions.merge());


                        //pd.dismiss();
                    } else {
                        Toast.makeText(Upload_New_Product.this, "Failed!", Toast.LENGTH_SHORT).show();
                        //pd.dismiss();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(Upload_New_Product.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                    //pd.dismiss();
                }
            });

}

1 Ответ

1 голос
/ 03 августа 2020

Каждый раз, когда вы вызываете document() без параметров, вы получаете другой случайный идентификатор документа. Ваш код здесь вызывает document() дважды:

ProductRef = db.collection("Sellers").document(CityName).collection(Uid).document();
ProductID =  db.collection("Sellers").document(CityName).collection(Uid).document().getId();

Если вы хотите повторно использовать один случайный идентификатор, просто вызовите его один раз:

ProductRef = db.collection("Sellers").document(CityName).collection(Uid).document();
ProductID = ProductRef.getId();
...