2016-12-14 3 views
0

Ich versuche, einen Dateipfad von einem Aufnahmebild zu erhalten, das ich mit der Kameraabsicht mache. Unter dem Bild und die Rückkehr es funktioniert gut, aber wenn ich versuche, den Weg von der es in dem onActivityResult Verfahren zu erhalten, indem Daten aus Absicht bekommen und den Weg bekommen, erhalte ich folgende Fehlermeldung:Intent.getData.getPath() gibt einen Nullwert zurück

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.package.app/com.package.app.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List android.net.Uri.getPathSegments()' on a null object reference 

Wie gesagt, die Bildaufnahme funktioniert, hat es sogar geschafft, es als Anlage an eine Mailing-App zu übermitteln, dort keine Probleme, aber seinen Weg zu finden, ist ein Problem. Hier ist der Code meiner onActivityResult Methode (Ich habe eine setText put() auf der Textview nur um zu sehen, was das getPath() Ergebnis sieht aus wie):

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if(resultCode == RESULT_OK){ 

     if(requestCode == 1){ 

      imageUri = data.getData(); 


     } 
    } 
    if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { 


     imageUri = data.getData(); 
     path = imageUri.getPath(); 
     tv = (TextView) findViewById(R.id.tvField); 
     tv.setText(path); 


    } 
} 

Ohne die letzten 3 Zeilen, es funktioniert einwandfrei. Fehler zeigt auf die Linie:

path = imageUri.getPath(); 

Vielen Dank für ein Interesse an meinen Problemen im Voraus.

Hier ist es die Absicht, für die Kamera Anfrage

ibCam= (ImageButton) findViewById(R.id.ibCam); 

     ibCam.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(cameraIntent, CAMERA_REQUEST); 

      } 
     }); 
+0

Die Ergebnisse hängen von der Absicht ab, die Sie erstellen, um die Aktivität für das Ergebnis zu starten. Sie sollten das Code-Snippet einfügen, wo Sie die Aktivität starten – Dharmendra

+0

Hinzugefügt dort ... – MilesWeirdo

+0

'Nimmt das Bild und die Rückgabe funktioniert es gut. Du gibst ein Bild zurück? An wen? – greenapps

Antwort

0
imageUri = data.getData(); 

ACTION_IMAGE_CAPTURE kein Uri zurückgibt.

Geben Sie ACTION_IMAGE_CAPTUREIntent ein, und verwenden Sie Bitmap photo=data.getParcelableExtra("data"), um das von Ihnen angeforderte Miniaturansichtsfoto abzurufen.

+0

Ich habe kein Problem beim Abrufen des Bildes mit dem 'Uri', ich brauche nur den Pfad des Fotos. Kann ich die Bitmap abrufen und ihren Pfad abrufen? Letztendlich möchte ich diesen Pfad als Anhang zu einer App mit 'javax.mail.Authenticator' senden – MilesWeirdo

+0

@MilesWeirdo:" Ich habe kein Problem beim Abrufen des Bildes mit dem Uri "- * ein paar * Kamera-Apps setzen ein 'Uri' in der Antwort. Die meisten werden nicht, weil das nicht funktioniert (wie ACTION_IMAGE_CAPTURE dokumentiert ist) (https://developer.android.com/reference/android/provider/MediaStore.html#ACTION_IMAGE_CAPTURE). Wenn du einen Pfad möchtest, [verwende 'EXTRA_OUTPUT' in deiner 'ACTION_IMAGE_CAPTURE'-Anfrage, um der Kamera-App mitzuteilen, wo das Foto zu platzieren ist (https://developer.android.com/training/camera/photobasics.html#TaskPath). – CommonsWare

Verwandte Themen