FireStorage Java Android将图像保存到FireStorage需要上传两次
我正在使用Firestore开发一个post系统,并使用Firebase存储来托管映像。用户必须填写5个字段,其中一个是要添加的图像。因此,为了让用户选择图像,我执行以下操作:FireStorage Java Android将图像保存到FireStorage需要上传两次,java,android,firebase,google-cloud-firestore,firebase-storage,Java,Android,Firebase,Google Cloud Firestore,Firebase Storage,我正在使用Firestore开发一个post系统,并使用Firebase存储来托管映像。用户必须填写5个字段,其中一个是要添加的图像。因此,为了让用户选择图像,我执行以下操作: img_imgpost.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // D
img_imgpost.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Defining Implicit Intent to mobile gallery
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(
intent,
"Select Image from here..."),
PICK_IMAGE_REQUEST);
}
});
protected void onActivityResult(int requestCode,
int resultCode,
Intent data)
{
super.onActivityResult(requestCode,
resultCode,
data);
// checking request code and result code
// if request code is PICK_IMAGE_REQUEST and
// resultCode is RESULT_OK
// then set image in the image view
if (requestCode == PICK_IMAGE_REQUEST
&& resultCode == RESULT_OK
&& data != null
&& data.getData() != null) {
// Get the Uri of data
ImageUri = data.getData();
try {
// Setting image on image view using Bitmap
Bitmap bitmap = MediaStore
.Images
.Media
.getBitmap(
getContentResolver(),
ImageUri);
img_imgpost.setImageBitmap(bitmap);
}
catch (IOException e) {
// Log the exception
e.printStackTrace();
}
}
}
此时,当用户单击create post按钮时,应用程序将上载图像,然后上载用户在字段中输入的数据。因此,在firestore中,我们将有:
|
|
--- title: "Post Title"
|
--- date: September 03, 2018 at 6:16:58 PM UTC+3
|
--- valutation: 8
|
--- urlImage: https// etc
[...] etc
问题是,如果不执行两次“创建帖子”按钮的onclick事件,我就无法加载图像。事实上,如果按一次“创建帖子”,firestore中的URLMImage记录将为空,firestore上不会加载图像
单击“创建帖子”按钮:
btn_invia.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
progress.setVisibility(View.VISIBLE);
posted=“”;
字符串[]字符格式=新字符串[]{“a”、“b”、“c”、“d”、“e”、“f”、“z”、“3”、“*”、“#”、“%”、“&”、“^”、“r”、“!”、“j”、“h”、“q”};//18个字符
对于(int i=0;i而言,uploadImage()
方法似乎是异步运行的,uploadDataOnFirestore
在uploadImage
之后立即运行,而无需等待上载图像,因此图像为null
要解决此问题,请移动uploadImage任务的OnCompleteListener
onComplete
方法中的uploadDataOnFirestore
方法调用,以便在运行uploadDataOnFirestore
uploadImage()之前图像已完成上载
方法似乎是异步运行的,uploadDataOnFirestore
在uploadImage
之后运行,而不等待上载图像,因此图像为null
要解决此问题,请移动uploadImage任务的OnCompleteListener
onComplete
方法中的uploadDataOnFirestore
方法调用,以便在运行uploadDataOnFirestore
btn_invia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progress.setVisibility(View.VISIBLE);
postId = "";
String [] charsForId = new String[] {"a", "b", "c", "d", "e", "f", "z", "3", "*", "#", "%", "&", "^", "r", "!", "j", "h", "q"}; //18 chars
for(int i = 0; i<20; i++){
postId += charsForId[(int) Math.floor((Math.random() * 17) + 0)];
}
Toast.makeText(posta.this, postId, Toast.LENGTH_SHORT).show();
descriz = descr.getText().toString();
titolo = title.getText().toString();
valut = vote.getText().toString();
uploadImage();
uploadDataOnFirestore(postId, descriz, titolo, valut, genre);
}
});