【问题标题】:Bitmap becomes null位图变为空
【发布时间】:2021-06-15 03:26:39
【问题描述】:

我正在从事一个项目,我必须将数据从一个活动传递到另一个活动。我尝试使用位图来传递图像。从 Firebase 存储中检索图像后,我可以使用 System.out 输出它,但如果我尝试在 fetch 方法之外读取它,它会在控制台中返回 null。

 for (DocumentSnapshot result : Objects.requireNonNull(task.getResult()).getDocuments()
                ) {
                    title = Objects.requireNonNull(result.get("Author")).toString();
                    author = Objects.requireNonNull(result.get("Title")).toString();
                    edition = Objects.requireNonNull(result.get("Edition")).toString();
                    isbn = Objects.requireNonNull(result.get("ISBN")).toString();
                    category = Objects.requireNonNull(result.get("Category")).toString();
                    reviews = result.get("Reviews");

                    Bitmap[] bitmap = new Bitmap[1];

                    try {
                      final File local_file = File.createTempFile("android_dev", "jpg");

                        storageRef.getFile(local_file).addOnCompleteListener(bitmap_task -> {
                            if (bitmap_task.isSuccessful()){
                                System.out.println("Sucess");
                                bitmap[0] = BitmapFactory.decodeFile(local_file.getAbsolutePath());

                                 System.out.println(bitmap[0] + " yes yes");
                            }else {
                                System.out.println("Failure!");
                            }
                        });

                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    if (category.equals(finalBook_category)) {
                        if (title.contains(search) || author.contains(search) || edition.contains(search) || isbn.contains(search)) {
                            System.out.println(bitmap[0] + "What is happening");
                            books_list.add(new LibraryBook(author, title, edition, isbn, category, reviews, bitmap[0]));

                        }
                    }
                }

                setAdapter();

            } else {
                System.out.println("Nope");
            }

        });
    }

【问题讨论】:

    标签: java android firebase bitmap firebase-storage


    【解决方案1】:

    你指的是这一行吗

    System.out.println(bitmap[0] + "What is happening");
    

    您看不到预期的位图输出?如果是这样,那是因为getFile() 是返回Task 的方法,带有addOnCompleteListener 回调。所以它不是同步的。所以你的代码到达了这个部分:

                        if (category.equals(finalBook_category)) {
                            if (title.contains(search) || author.contains(search) || edition.contains(search) || isbn.contains(search)) {
                                System.out.println(bitmap[0] + "What is happening");
                                books_list.add(new LibraryBook(author, title, edition, isbn, category, reviews, bitmap[0]));
    
                            }
                        }
    

    在从您的存储桶中提取位图之前。将 if 语句放在此行下方:

    System.out.println(bitmap[0] + " yes yes");
    

    这样它会等到回调,并且你知道你已经下载了图像,然后再使用它。

    【讨论】:

    • 我在问这个之前试过了,但我遇到了一个非常奇怪的错误,因为我忘记了还包括 setAdapter() 方法。感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多