【问题标题】:how do I store multiple images Url in Firebase database?如何在 Firebase 数据库中存储多个图像 URL?
【发布时间】:2018-05-22 09:30:15
【问题描述】:

我已经在 firebase 存储中上传了多张图片,现在我想将它们的网址与其他数据一起添加到数据中。我该怎么做?我在日志中获取了所有 url,但是当我尝试使用以下代码时应用程序崩溃了?

storageReference = FirebaseStorage.getInstance().getReference();
        databaseReference= FirebaseDatabase.getInstance().getReference().child("Blog Data");

final DatabaseReference newBlog = databaseReference.push();
 for (int i = 0; i < list.size(); i++)

        {
            if (imageUri != null) {

                final StorageReference ref = filePath.child(fileName[i]);

                final int y = i;
                ref.putFile(imageUri[i])
                        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                                  @Override
                                                  public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                                      progressDialog.cancel();
                                                      Toast.makeText(getApplicationContext(), "Uploaded successfuly", Toast.LENGTH_LONG).show();
                                                   downloadUri[y] = taskSnapshot.getDownloadUrl();
                                                      Log.i("DownlaodUri ", "downlaod URi is :"+downloadUri[y].toString());

                                                     newBlog.child("image_"+y+1).setValue(downloadUri[y]);




                                                  }


                                              }

                        )

我还尝试在第一个循环之后使用另一个 for 循环来存储 url。它将所有数据保存在数据库中,但不存储 url。

我就是这样尝试的。

}// end of upper for loop
       DatabaseReference newBlog = databaseReference.push();
        newBlog.child("title").setValue(title);
        newBlog.child("desc").setValue(desc);


        for(int i =  0; i<list.size(); i++) {

           newBlog.child("image_"+i+1).setValue(downloadUri[i]);
       }
       newBlog.child("location").setValue(location);

它存储除图像之外的所有值。

在数据库中存储所有图像 url 后,我应该如何获取所有图像,因为我不知道数据库中的图像数量,所以我不能制作一定数量的 imageview?我如何知道一个节点有多少个子名称“ïimages_1”、“images_2”?

Logcat。

identical 617 lines
05-22 15:07:22.736 29586-29586/com.example.anant.ExampleE/UncaughtException:     at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                    at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                    at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                    at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                    at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                    at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                    at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)



I/zygote64: Background concurrent copying GC freed 635684(49MB) AllocSpace objects, 1(20KB) LOS objects, 44% free, 29MB/53MB, paused 377us total 111.410ms
05-22 15:07:22.737 29586-29586/com.example.anant.ExampleE/UncaughtException:     at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                    at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                    at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                    at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)

I/chatty: uid=10162(com.example.anant.Example) identical 1231 lines
05-22 15:07:23.524 29586-29586/com.example.anant.ExampleE/AndroidRuntime:     at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)

FATAL EXCEPTION: main
                                                                             Process: com.example.anant.Example, PID: 29586
                                                                             java.lang.StackOverflowError: stack size 8MB
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:128)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)
                                                                                 at com.google.android.gms.internal.zzekq.zzca(Unknown Source:132)
                                                                                 at com.google.android.gms.internal.zzekp.zzbw(Unknown Source:263)
                                                                                 at com.google.android.gms.internal.zzekp.zzbz(Unknown Source:0)

【问题讨论】:

  • 请添加显示错误的logcat
  • 我已经添加了 logcat。请检查。
  • 错误不是您提出的问题。只需推送每个项目即可添加所有图像 无需设置 image1、image2 等 onDataChange dataSnapShot.getChilderCount() 将获取添加的图像数量

标签: java android firebase firebase-realtime-database firebase-storage


【解决方案1】:

我在将 downloadUri 传递给 setvalue() 时忘记添加 .toString。这就是导致溢出异常的原因。

详情请参考此问题

https://stackoverflow.com/a/38128667/8457096

ps。我不知道为什么人们如果不能回答问题就会投反对票。

【讨论】:

    【解决方案2】:
    storageReference = FirebaseStorage.getInstance().getReference();
        databaseReference= FirebaseDatabase.getInstance().getReference().child("Blog Data");
    
    //final DatabaseReference newBlog = databaseReference.push();//not required
     for (int i = 0; i < list.size(); i++)
    
        {
            if (imageUri != null) {
    
                final StorageReference ref = filePath.child(fileName[i]);
    
                final int y = i;
                ref.putFile(imageUri[i])
                        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                                  @Override
                                                  public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                                      progressDialog.cancel();
                                                      Toast.makeText(getApplicationContext(), "Uploaded successfuly", Toast.LENGTH_LONG).show();
                                                   downloadUri[y] = taskSnapshot.getDownloadUrl();
                                                      Log.i("DownlaodUri ", "downlaod URi is :"+downloadUri[y].toString());
    
            HashMap map = new HashMap();
            map.put("image_url",downloadUri[y]);
                                                     databaseReference.push().updateChildren(map);
    
    
    
    
                                                  }
    
    
                                              }
    
                        )
    

    请尝试编辑上面的代码并尝试..

    【讨论】:

    • 这个错误是由一些内存溢出异常引起的,不是由firebase引起的,可能是某些listview适配器持有所有要上传的图像
    • 但是当我删除行 newBlog.child("image_").setValue(downloadUri[y]);它完美地工作。即使在 for 循环结束后也不会添加 url。请检查任务
    • DatabaseReference newBlog = databaseReference.getInstance().getReference().child("Images"); for(int i = 0; i
    • 我犯了一个愚蠢的错误。我在将 downloadUri 传递给 setvalue() 时忘记添加 .toString ,而是在日志中添加。它现在工作。最后一个问题如何获取存储在节点中的图像数量?
    • 使用 newBlog.push().child("image_url").setValue(download url in string);然后在 addValueEventListener 的 onDataChange 内部调用 dataSnapshot.getChildrenCount() 以获取没有添加的 url
    猜你喜欢
    • 2020-12-18
    • 2021-07-18
    • 2019-05-07
    • 2019-01-06
    • 2020-09-24
    • 2021-10-28
    • 2017-08-10
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多