如何将downloadUrl添加到firebaseDB对象?

时间:2017-04-10 17:57:46

标签: android firebase firebase-realtime-database firebase-storage

我遇到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']

2 个答案:

答案 0 :(得分:0)

您只是从Task<Uri>

获得mChosenStorageRef.getDownloadUrl()

我有2个想法可以为您获取downloadUrl。

  1. taskSnapshot.getDownloadUrl()作为字符串保存到putFile回调中的实例变量中,然后您可以在发送到RTDB之前检查此变量的值(如果需要)。

    mDownloadUrl = taskSnapshot.getDownloadUrl().toString();
    
  2. 从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();




            }
        });