位图变为空
Bitmap becomes null
我正在做一个项目,我必须将数据从 activity 传递给另一个。我尝试使用位图来传递图像。从 Firebase 存储中检索图像后,我可以使用 System.out 输出它,但如果我尝试在 fetch 方法之外读取它,它在控制台中 returns 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");
}
});
}
你指的是这一行
System.out.println(bitmap[0] + "What is happening");
因为您没有看到预期的位图输出?如果是这样,那是因为 getFile()
是 returns 一个 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");
这样它会等到回调,你知道你在使用它之前已经下载了图像。
我正在做一个项目,我必须将数据从 activity 传递给另一个。我尝试使用位图来传递图像。从 Firebase 存储中检索图像后,我可以使用 System.out 输出它,但如果我尝试在 fetch 方法之外读取它,它在控制台中 returns 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");
}
});
}
你指的是这一行
System.out.println(bitmap[0] + "What is happening");
因为您没有看到预期的位图输出?如果是这样,那是因为 getFile()
是 returns 一个 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");
这样它会等到回调,你知道你在使用它之前已经下载了图像。