如何将 downloadUrl 添加到 firebaseDB 对象?
How to add downloadUrl to the firebaseDB object?
我对 Firebase 存储和实时数据库有疑问。我的 firebase 对象由 4 个字符串字段组成,其中三个来自 EditText 小部件,第四个必须是我放入 Firebase 存储的图像的下载URL,但我不明白如何把它放在那里。
我当前将数据推送到 FirebaseDB 的代码如下:
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()), mChosenStorageRef.getDownloadUrl().toString());
mChosenDBRef.push().setValue(menuItem);
} catch (NumberFormatException exception) {
Toast toast = Toast.makeText(MainActivity.this, R.string.price_error, Toast.LENGTH_LONG);
toast.show();
}
name.setText("");
description.setText("");
price.setText("");
mChosenStorageRef.getDownloadUrl().toString()
方法给了我类似 "com.google.android.gms.tasks.zzh@96b2841" 但不是正确的 URL.
我可以从下面的代码中得到正确的donwloadURL,bot我不明白如何把它放到上面的push方法中。
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();
}
});
}
}
你刚刚从 mChosenStorageRef.getDownloadUrl()
得到 Task<Uri>
我有 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
}
});
这个问题比我想象的要简单。我将 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();
}
});
我对 Firebase 存储和实时数据库有疑问。我的 firebase 对象由 4 个字符串字段组成,其中三个来自 EditText 小部件,第四个必须是我放入 Firebase 存储的图像的下载URL,但我不明白如何把它放在那里。
我当前将数据推送到 FirebaseDB 的代码如下:
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()), mChosenStorageRef.getDownloadUrl().toString());
mChosenDBRef.push().setValue(menuItem);
} catch (NumberFormatException exception) {
Toast toast = Toast.makeText(MainActivity.this, R.string.price_error, Toast.LENGTH_LONG);
toast.show();
}
name.setText("");
description.setText("");
price.setText("");
mChosenStorageRef.getDownloadUrl().toString()
方法给了我类似 "com.google.android.gms.tasks.zzh@96b2841" 但不是正确的 URL.
我可以从下面的代码中得到正确的donwloadURL,bot我不明白如何把它放到上面的push方法中。
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();
}
});
}
}
你刚刚从 mChosenStorageRef.getDownloadUrl()
Task<Uri>
我有 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 } });
这个问题比我想象的要简单。我将 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();
}
});