2017-11-10 19 views
0

私はFireBaseストレージについて教えています。ユーザーが画像を選択してFirebaseにアップロードする簡単なアプリを作ることにしました。 しかし、できるだけ早く私は、アップロードする画像を選択すると、私のアプリがクラッシュし、私がイメージからそれを取得していたとしても、私のURIがnullであることを言って、私は画像を選択してアップロードできませんか?

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()); 
         } 
        }); 
     } 
    } 

を選択し、私はこのエラーを5時間以上解決しようとしていて、何十億回もドキュメントを読んでいてもまだ混乱しています。どんな助けもありがとう!

答えて

0

選択したUriは、Intentthe dataとして返されます。この変更を試してください:

@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 ")' –

関連する問題