Android: почему клавиша нажатия firebase не меняется

# #android #firebase #firebase-realtime-database #firebase-storage

Вопрос:

Поэтому я загружаю изображения в хранилище firebase, и ссылка будет сохранена внутри firebase в реальном времени

теперь я использую цикл for для загрузки изображений, я хочу, чтобы имя изображения, загруженное в хранилище, было push-идентификатором, который firebase предоставляет в режиме реального времени.

но по какой-то причине изображение будет успешно сохранено с другим идентификатором push внутри хранилища , но при сохранении в реальном времени идентификатор будет таким же, и цикл будет постоянно обновляться внутри того же идентификатора. ImagePath-глобальная переменная.

 for (uploadCount = 0; uploadCount lt; ImageList.size(); uploadCount  ) {    imagePath = productRef.child(UID).child("images").push().getKey();  Uri IndividualImage = ImageList.get(uploadCount);  StorageReference ImageName = productImagesRef.child(UID).child(imagePath);   //Compress Images  Bitmap bmp = null;  try {  bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), IndividualImage);  } catch (IOException e) {  e.printStackTrace();  }  ByteArrayOutputStream baos = new ByteArrayOutputStream();  bmp.compress(Bitmap.CompressFormat.JPEG, 25, baos);  byte[] data = baos.toByteArray();  //End of compressing   //start on uploading compressed  ImageName.putBytes(data).addOnSuccessListener(taskSnapshot -gt; ImageName.getDownloadUrl()  .addOnSuccessListener(uri -gt; {  String url = String.valueOf(uri);  StoreLink(url);  })); }  

это загрузка firebase в реальном времени:

 private void StoreLink(String url) {  HashMaplt;String ,Objectgt; hashMap = new HashMaplt;gt;();  hashMap.put("image", url);  hashMap.put("id", imagePath);  dialog.dismiss();   assert imagePath != null;  productRef.child(UID).child("images").child(imagePath).updateChildren(hashMap).addOnSuccessListener(new OnSuccessListenerlt;Voidgt;() {  @Override  public void onSuccess(Void aVoid) {  finish();  }  }); }  

Ответ №1:

Вы нигде не переходите imagePath к своей StoreLink функции, что заставляет меня подозревать, что она где-то исходит из контекста, и вы просто видите ее последнее значение.

Это исправит ситуацию, измените свою StoreLink функцию на:

 // 👇 private void StoreLink(String url, String imagePath) {  HashMaplt;String ,Objectgt; hashMap = new HashMaplt;gt;();  hashMap.put("image", url);  hashMap.put("id", imagePath);  dialog.dismiss();   assert imagePath != null;  productRef.child(UID).child("images").child(imagePath).updateChildren(hashMap).addOnSuccessListener(new OnSuccessListenerlt;Voidgt;() {  @Override  public void onSuccess(Void aVoid) {  finish();  }  }); }  

А затем назовите это с:

 // 👇 StoreLink(url, imagePath);  

Комментарии:

1. это сработало, спасибо