# #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. это сработало, спасибо