2017-11-10 2 views
0

Ich lehre mich selbst über FireBase-Speicher, und ich entschied mich, eine einfache App zu machen, mit der der Benutzer ein Bild auswählen und es zu Firebase hochladen kann. jedoch sobald ich das Bild auswählen, stürzt meine App zu laden und zu sagen, dass mein URI null ist, auch wenn ich es aus dem Bild bin immer ichKann Bild nicht auswählen und hochladen?

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

mich wähle Ich habe versucht, diesen Fehler seit mehr als fünf Stunden zu lösen, und bin immer noch verwirrt, obwohl ich die Dokumente eine Milliarde Mal durchgegangen bin. Jede Hilfe wird geschätzt!

Antwort

0

Die ausgewählte Uri wird als the data der Intent zurückgegeben, nicht als ein Extra. Versuchen Sie diese Änderung:

@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

Vielen Dank für Ihre Antwort! Ich habe das ausprobiert, und jetzt änderte sich meine Ausnahme zu 'Kann nicht zu getRoot hochladen. Sie sollten auf einen Speicherort wie .getReference hochladen ('image.png'). PutFile ... ' –

+0

Ich habe auch versucht, die Regeln in Firebase zu ändern, um zu lesen und rechts wie immer wahr, aber ich bekomme immer noch diesen Fehler . Was soll ich machen? –

+0

@RuchirBaronia: Ich habe meine Antwort aktualisiert. Erstellen Sie Ihre Referenz in einem Unterordner von root, z. "images": 'StorageReference storageRef = FirebaseStorage.getInstance(). getReference (" Bilder ")' –

Verwandte Themen