2017-11-10 235 views
0

我正在自學FireBase存儲,並決定製作一個簡單的應用程序,讓用戶選擇一個圖像,然後將其上傳到Firebase。 但是,只要我選擇要上傳的圖片,我的應用程序崩潰,並且說我的URI爲空,即使我得到它從我的形象選擇無法選擇圖片並上傳?

Full stacktrace

@Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode != RESULT_OK) { 
      return; 
     } 
     if (requestCode == 1) { 
      final Bundle extras = data.getExtras(); 
      if (extras != null) { 
       //Get image 
       path = extras.getParcelable("data"); 
      } 
      StorageReference storageRef = FirebaseStorage.getInstance().getReference(); 
      storageRef.putFile(path) 
        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
         @Override 
         public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
          // Get a URL to the uploaded content 
          @SuppressWarnings("VisibleForTests") Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
          Log.e("myTag", "done, " +downloadUrl); 
          Intent sharingIntent = new Intent(Intent.ACTION_SEND);  
         } 
        }) 
        .addOnFailureListener(new OnFailureListener() { 
         @Override 
         public void onFailure(@NonNull Exception exception) { 
          Log.e("myTag", exception.toString()); 
         } 
        }); 
     } 
    } 

我我一直試圖解決這個錯誤超過五個小時,儘管經歷了十億次文檔,我仍然感到困惑。任何幫助表示讚賞!

回答

0

選定的Uri返回the dataIntent,不作爲額外的。試試這個改變:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode != RESULT_OK) { 
     return; 
    } 
    if (requestCode == 1) { 
     path = data.getData(); // assumes path is declared as a Uri 
     StorageReference storageRef = FirebaseStorage.getInstance().getReference("images"); 
     storageRef.putFile(path)... 
+0

非常感謝你的回答!我試過了,現在我的異常變成了'無法上傳到getRoot。你應該上傳到一個存儲位置,如.getReference('image.png')。putFile ...' –

+0

我也嘗試調整firebase中的規則,以允許閱讀和權利一如既往,但我仍然得到這個錯誤。我該怎麼辦? –

+0

@RuchirBaronia:我更新了我的答案。創建你的引用到根的子文件夾,例如「images」:'StorageReference storageRef = FirebaseStorage.getInstance()。getReference(「images」)' –