【问题标题】:Posted image is not appearing in Firebase Recycler View发布的图片未出现在 Firebase Recycler 视图中
【发布时间】:2019-06-19 18:58:26
【问题描述】:

我正在尝试从 firebase 数据库中检索所有用户帖子,并希望借助 Recycler View 和 Firebase Recycler Adapter 将其显示在 Main Activity 上。 但是在成功将图像上传到 Firebase 数据库后,我可以在 firebase 控制台的存储部分看到上传的图像,但在数据库部分显示类似 -

com.google.android.gms.tasks.zzu@3c50f45

所以我认为问题出在这行代码上:

downloadUrl = task.getResult().getStorage().getDownloadUrl().toString();

代码:

private Uri ImageUri;
    private StorageReference PostsImagesRefrence;
    private DatabaseReference UsersRef, PostsRef;
    PostsImagesRefrence = FirebaseStorage.getInstance().getReference();
    PostsRef = FirebaseDatabase.getInstance().getReference().child("Posts");

    StorageReference filePath = PostsImagesRefrence.child("Post Images").child(ImageUri.getLastPathSegment() + postRandomName + ".jpg");

            filePath.putFile(ImageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>()
            {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task)
                {
                    if(task.isSuccessful())
                    {
                        downloadUrl = task.getResult().getStorage().getDownloadUrl().toString();
                        Toast.makeText(PostActivity.this, "image uploaded successfully to Storage...", Toast.LENGTH_SHORT).show();
                        SavingPostInformationToDatabase();
                    }
                    else
                    {
                        String message = task.getException().getMessage();
                        Toast.makeText(PostActivity.this, "Error occured: " + message, Toast.LENGTH_SHORT).show();

                    }

                }
            });

设计视图和实际输出图像:

Design View

View After Running

请尝试为我提供正确的代码,帮助我,因为我是新手,不了解 Android Studio,并且想完成这个大学项目。

【问题讨论】:

  • 那么这段代码有什么问题,只有图片不显示?
  • 您的postImage 是否为您的图片保留了正确的值?
  • 尝试记录它的值。
  • @AlexMamo 我想你现在可以回答了,我已经更新了帖子。

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


【解决方案1】:

尝试改变

String userFullName = dataSnapshot.child("fullname").getValue().toString();
String userProfileImage = dataSnapshot.child("profileimage").getValue().toString();

String userFullName = dataSnapshot.child("fullname").getValue(String.class);
String userProfileImage = dataSnapshot.child("profileimage").getValue(String.class);

编辑:试试这个

dateRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri downloadUrl) 
    {                
       downloadUrlString = downloadUrl.toString();
    } 
});

【讨论】:

  • 感谢您的回答,但它不起作用。
  • 告诉我这行代码对吗? downloadUrl = task.getResult().getStorage().getDownloadUrl().toString();
  • 您是否检查过您的数据库是否已填充且图片是否已正确上传?
【解决方案2】:

解决了,我使用旧方法将图像存储到 firebase 数据库。

已进行以下更改以解决该问题:

final StorageReference filePath = PostsImagesRefrence.child("Post Images").child(ImageUri.getLastPathSegment() + postRandomName + ".jpg");

            final UploadTask uploadTask =filePath.putFile(ImageUri);

            uploadTask.addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e)
                {
                    String message =e.toString();
                    Toast.makeText(PostActivity.this, "Error occured: " + message, Toast.LENGTH_SHORT).show();
                }
            }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>()
            {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot)
            {
                Toast.makeText(PostActivity.this, "Image uploaded successfully to Storage...", Toast.LENGTH_SHORT).show();

                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();
                        }
                        downloadUrl= filePath.getDownloadUrl().toString();
                        return filePath.getDownloadUrl();
                    }
                }).addOnCompleteListener(new OnCompleteListener<Uri>()
                {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task)
                    {
                        if (task.isSuccessful())
                        {
                            downloadUrl = task.getResult().toString();
                            Toast.makeText(PostActivity.this, "Stored Image Successfully to Database", Toast.LENGTH_SHORT).show();
                            SavingPostInformationToDatabase();
                        }

                    }
                });

            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多