如何在 Firebase 中添加图像列表?

Posted

技术标签:

【中文标题】如何在 Firebase 中添加图像列表?【英文标题】:How to add image list in Firebase? 【发布时间】:2020-06-23 06:54:54 【问题描述】:

我想在 firebase 中上传图片列表,但在 firebase 上传成功监听器中没有在 OnSuccessListener 上添加图片列表。

试过了 我在它工作的 add onSuccessListener 类之外添加了字符串值,并且我尝试记录它也工作的 url。但它没有在 OnSuccessListener 的 arrayList 中添加字符串值。 谢谢你的帮助。

主要代码

 public void UploadImage() 
    if (isUserSelected != null) 
        progressDialog.setTitle("Image is Uploading...");
        Log.d(TAG, "UploadImage: uploading");
        progressDialog.show();
        Log.d(TAG, "UploadImage:  after progress bar");
        for (int i = 0; i < multipleFileUploads.size(); i++) 
            Log.d(TAG, "UploadImage: " + i);
            final StorageReference storageReference2 = storageReference.child(System.currentTimeMillis() + "." + GetFileExtension(multipleFileUploads.get(i)));
            storageReference2.putFile(multipleFileUploads.get(i))
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() 
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) 
                            Log.d(TAG, "onSuccess: ");
                            progressDialog.dismiss();
                            Toast.makeText(getApplicationContext(), "Image Uploaded Successfully ", Toast.LENGTH_LONG).show();
                            storageReference2.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() 
                                @Override
                                public void onSuccess(Uri uri) 
                                    Log.d(TAG, "onSuccess: uri " + uri.toString());
                                    imagelist.add(uri.toString());

                                
                            );
                        
                    ).addOnFailureListener(new OnFailureListener() 
                @Override
                public void onFailure(@NonNull Exception e) 
                    Log.d(TAG, "onFailure: " + e.getMessage());
                
            ).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() 
                @Override
                public void onProgress(UploadTask.TaskSnapshot taskSnapshot) 
                    Log.d(TAG, "onProgress: " + taskSnapshot.getBytesTransferred());
                    Log.d(TAG, "onProgress: " + taskSnapshot.getTotalByteCount());
                
            ).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() 
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) 
                    Log.d(TAG, "onComplete: " + task.getException());
                
            );
        
        imageList.add("custom list");
        uploadinfo imageUploadInfo = new uploadinfo(txtdata.getText().toString(), txtData1.getText().toString(), imageList.toString());
        String ImageUploadId = databaseReference.push().getKey();
        databaseReference.child(ImageUploadId).setValue(imageUploadInfo);


     else 
        Toast.makeText(uploadimg1.this, "Please Select Image or Add Image Name", Toast.LENGTH_LONG).show();

    

Firebase 的 POJO 代码

public class uploadinfo 
public String imageName;
public String imageName1;
public String imageListString;

public uploadinfo(String imageName, String imageName1, String imageListString) 
    this.imageName = imageName;
    this.imageName1 = imageName1;
    this.imageListString = imageListString;


public String getImageName() 
    return imageName;


public void setImageName(String imageName) 
    this.imageName = imageName;


public String getImageName1() 
    return imageName1;


public void setImageName1(String imageName1) 
    this.imageName1 = imageName1;


public String getImageListString() 
    return imageListString;


public void setImageListString(String imageListString) 
    this.imageListString = imageListString;
    

在 Firebase 中

【问题讨论】:

logcat 里有没有打印出来的东西? 在logcat中显示文件的uri,但它没有添加到arraylist中。 您将 url 添加到(任何)arraylist 的哪一行? @npk 我更新了我的代码,因为我一直在调试我的代码。谢谢。它在下面 getDownloadUrl().addOnSuccessListener(); 现在可以用了吗? 【参考方案1】:

问题可能出在您的模型中。在 firebase 中,顺序为 imageListString、imageName、imageName1。但是在构造函数中的模型中,你得到了 String imageName、String imageName1、String imageListString。同时,我不确定在将其发送到 Firebase 之前如何生成您创建的列表。

【讨论】:

【参考方案2】:

你可以试试这个方法

 UploadTask uploadTask = storageReference2.putFile(multipleFileUploads.get(i));   
Task<Uri> urlTask = 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();
            

            // Continue with the task to get the download URL
            return ref.getDownloadUrl();
        
    ).addOnCompleteListener(new OnCompleteListener<Uri>() 
        @Override
        public void onComplete(@NonNull Task<Uri> task) 
            if (task.isSuccessful()) 
                Uri downloadUri = task.getResult();
                imagelist.add(downloadUri.toString());
             else 
                // Handle failures
                // ...
            
        
    );

【讨论】:

以上是关于如何在 Firebase 中添加图像列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GridView 中显示 Firebase 存储图像

如何在将照片上传到 Firebase 存储时将日期或时间等用户图像详细信息添加到文件名?

如何使用 Firebase 云存储添加图像存储功能?

如何添加onclick imageview网址以及如何从firebase更新网址

如何通过云函数将图像存储在 Firebase 存储中

如何将图像上传到firebase存储然后将图像url存储在firestore中?