2017-04-13 70 views
0

我嘗試存儲將文件上傳到Firebase存儲後獲得的Firebase存儲URL,但出於我無法理解的原因,我無法寫入Storage onSuccess偵聽器內Firebase數據庫上的某個位置。任何想法爲什麼?如果這不是存儲上傳文件的URL位置的正確方法,那麼是什麼?無法在Firebase存儲onSuccess偵聽器中寫入Firebase數據庫

我似乎無法找到一個這樣的例子。這是爲Android。 謝謝

+0

你可以張貼一些代碼? – wnieves19

+1

我一直在數據庫中存儲文件的下載URL(和其他元數據)。所以它必須是特定於您的使用情況。沒有看到[重現問題的最小代碼](http://stackoverflow.com/help/mcve)(閱讀鏈接,這很有用),這將很難說更多。 –

+1

感謝您的快速回復。我回家後肯定會在今天晚上提供一些代碼。 – Sethsmagic

回答

0

你所要完成的是完全可行的,這裏有一個例子

StorageReference fileRef = ....; 
    Uri fileUri = ....; 
    UploadTask uploadTask = fileRef.putFile(fileUri); 

    uploadTask.addOnFailureListener(new OnFailureListener() { 
     @Override 
     public void onFailure(@NonNull Exception exception) { 
      // Handle unsuccessful uploads 
      Log.d("TAG", "onFailure: " + exception); 

     } 
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
     // This is the URL you are looking for, here you should insert it into your db instance...Something like this 
     Uri downloadUrl = taskSnapshot.getDownloadUrl(); 

     DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference(); 
     dbRef.child("uploadUrls").child("url1").setValue(downloadUrl.toString()); 
     } 
    }); 

我希望這有助於

+1

嗨Wnieves19,這是有幫助的。在看到你的評論和Frank van Puffelen確認我想要做的事情是可能的之後,我做了更多的挖掘並發現了這個問題(至少我認爲我是這麼做的)。我試圖將Uri存儲爲一個uri而不是一個字符串。當我試圖將我的對象存儲到數據庫時,它會導致一個計算器!我試圖將其更改爲一個字符串,它似乎工作正常。 – Sethsmagic

+1

然而,Firebase允許存儲用戶照片網址(我可以使用user.getPhotoUrl()進行檢索),而且我可以將這些網址存儲爲Uri的網址,但不能將其存儲爲Firebase存儲的URI 。我唯一的猜測就是Uri的Firebase存儲時間要長得多,因此這個問題。如果你們中的任何一位能夠對這個問題有更深入的瞭解,那將是非常棒的,但是我非常感謝幫助,謝謝! – Sethsmagic

+0

問題在於getPhotoUrl()方法返回一個Uri。關於您可以保存在實時數據庫中的數據類型,請參閱讀寫數據文檔: https://firebase.google.com/docs/database/android/read-and-write 希望這有助於 – wnieves19

0
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference(); 

uploadTask.addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       // Handle unsuccessful uploads 
       Log.d("TAG", "onFailure: " + exception); 

      } 
     }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
      // This is the URL you are looking for, here you should insert it into your db instance...Something like this 
      Uri downloadUrl = taskSnapshot.getDownloadUrl(); 

      addData(downloadUrl.toString()); 

      } 
     }); 


public void addData(String downloadUrl) 
{ 

dbRef.child("uploadUrls").child("url1").setValue(downloadUrl); 

}