我遇到Firebase存储和实时数据库的问题。我的firebase对象包含4个String字段,其中三个来自EditText小部件,第四个必须是我放入Firebase存储的图像的downloadURL,但我无法理解如何将它放在那里。
我目前将数据推送到FirebaseDB的代码如下:
mChosenStorageRef.getDownloadUrl().toString()
uploadImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, RC_PHOTO_PICKER);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RC_PHOTO_PICKER)
{
Uri imageUri = data.getData();
mChosenStorageRef = mChosenStorageRef.child(imageUri.getLastPathSegment());
mChosenStorageRef.putFile(imageUri).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUri = taskSnapshot.getDownloadUrl();
}
});
}
}
方法为我提供了类似“com.google.android.gms.tasks.zzh@96b2841”的内容,但没有提供正确的网址。
我可以从下面的代码中获取正确的donwloadURL,我无法理解如何将其放入上面的推送方法中。
lst1 = [1,2,3,4,5]
lst2 = ['one','two','three','four','five']
答案 0 :(得分:0)
您只是从Task<Uri>
mChosenStorageRef.getDownloadUrl()
我有2个想法可以为您获取downloadUrl。
将 taskSnapshot.getDownloadUrl()作为字符串保存到putFile回调中的实例变量中,然后您可以在发送到RTDB之前检查此变量的值(如果需要)。
mDownloadUrl = taskSnapshot.getDownloadUrl().toString();
从Storage获取downloadUrl,这样你首先需要一个回调响应,然后你会得到uri然后将它转换为字符串并发送到RTDB。
mChosenStorageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener < Uri > () {
@Override public void onSuccess(Uri uri) {
mDownloadUrl = uri.toString();
// Send datas to RTDB
}
});
答案 1 :(得分:0)
这个问题比我预想的要容易得多。我将URI存储在onCreate之外的URI变量中,稍后在上传方法中使用它。
需要越来越多地学习java。感谢大家的关注和帮助。
private Uri downloadURL;
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
menuItem menuItem = new menuItem(name.getText().toString(), description.getText().toString(), Integer.parseInt(price.getText().toString()), downloadURL.toString());
mChosenDBRef.push().setValue(menuItem);
} catch (NumberFormatException exception) {
Toast toast = Toast.makeText(MainActivity.this, R.string.price_error, Toast.LENGTH_LONG);
toast.show();
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_PHOTO_PICKER) {
Uri imageUri = data.getData();
mChosenStorageRef = mChosenStorageRef.child(imageUri.getLastPathSegment());
mChosenStorageRef.putFile(imageUri).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
downloadURL = taskSnapshot.getDownloadUrl();
Toast toast = Toast.makeText(MainActivity.this, "Successful", Toast.LENGTH_LONG);
toast.show();
}
});