updateChildren не обновляет массив изображений, он перезаписывает существующий массив (url) данных firebase android - PullRequest
0 голосов
/ 25 сентября 2018

updateChildren не обновляет массив изображений, его перезаписывает существующий массив (url) данных firebase android.Я хочу добавить еще несколько изображений в существующий массив URL в Firebase.Это моя структура firebase

  Blog--
     pushid--
       "name": xxxx
        "url"
             -- 0: "first image"
                1: "second image"

Я хочу обновить (добавить еще несколько изображений в существующий массив url. Я использую updatechildren (), но он перезаписывает существующие изображения

for (String photo : selectedImages) {
                    blogimages = new ArrayList<>();
                    Uri file = Uri.fromFile(new File(photo));
                    Bitmap bitmap = null;
                    try {
                        bitmap = decodeSampledBitmapFromUri(file, mMaxDimension, mMaxDimension);


                        StorageReference photoRef = mstorageReference.child("images/" + file.getLastPathSegment());
                        uploadTask = photoRef.putBytes(byteArray);

                        uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {



                            }
                        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                Uri downloadUrl = taskSnapshot.getDownloadUrl();
                                blogimages.add(downloadUrl.toString());

                                Map<String, Object> childUpdates = new HashMap<>();
                                childUpdates.put("url", blogimages);

                                HashMap<String, Object> params = new HashMap<>();

                                params.put("url", blogimages);
                                uploads.child(post_key).child("url").updateChildren(params).addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {
                                        if (task.isSuccessful()) {
                                            Toast.makeText(UpdatePost.this, "Post updated..", Toast.LENGTH_LONG).show();
                                            MainActivity.loaded = true;
                                            Intent i = new Intent(UpdatePost.this, MainActivity.class);
                                            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                            startActivity(i);
                                        }
                                    }
                                }).addOnFailureListener(new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        Toast.makeText(UpdatePost.this, "Failed to post the blog.. Try again later", Toast.LENGTH_LONG).show();
                                    }
                                });

                            }
                        });
                    } catch (FileNotFoundException e) {
                        Log.e(TAG, "Can't find file to resize: " + e.getMessage());
                        FirebaseCrash.report(e);
                    } catch (IOException e) {
                        Log.e(TAG, "Error occurred during resize: " + e.getMessage());
                        FirebaseCrash.report(e);
                    }
                }

1 Ответ

0 голосов
/ 25 сентября 2018

Это не так updateChildren() работает.updateChildren() полностью перезапишет содержимое всех дочерних полей, которые вы укажете.Он вообще не «проталкивает» элементы массива и не выполняет никаких других операций, подобных массиву.Если вы хотите добавить массив, вам нужно будет прочитать содержимое массива из базы данных, затем добавить элемент, а затем записать его обратно.

Обратите внимание, что Firestore отличается в этому него есть операция arrayUnion для добавления неуникальных элементов массива в поле типа массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...