2017-09-14 3 views
1

J'ai une application et j'ai besoin de prendre des photos, puis le télécharger sur Firebase. J'ai fondamentalement besoin du chemin d'Uri de la photo prise. Je lis Get file path of image on Android, mais j'ai un problème avec NullPointerException.Android obtenir le chemin du fichier de l'image avec en Fragment

La principale différence entre mon problème et le problème ci-dessus est que je le fais dans un fragment.

Voici mon code:

mTakePhotoButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, CAMERA_REQUEST); 
     } 
    }); 

Je reçois NullPointerException en ligne avec Uri imgUri.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      mImgView.setImageBitmap(photo); 
      Uri imgUri = getImageUri(getActivity().getApplicationContext(), photo); 
      mManager.setPhotoUri(imgUri); 
     } 
} 

Et voici la méthode que j'utilise pour obtenir Uri.

private Uri getImageUri(Context inContext, Bitmap inImage) { 
     ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
     inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
     String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); 
     return Uri.parse(path); 
    } 

Le message d'erreur est exacte:

java.lang.RuntimeException: non livrer résultat resultinfo {qui = android: fragment: 1, demande = 22222, résultat = -1, données = Intention {act = ligne-data (a extras)}} à l'activité {.MainActivity}: java.lang.NullPointerException: uriString

Je vous serais reconnaissant toute aide.

L'ensemble de journal d'erreurs:

09-14 12: 06: 18,448 16497-16497/com.example.radzik.recipes E/AndroidRuntime: FATAL EXCEPTION: principal processus: com.example.radzik .recipes, PID: 16497 java.lang.RuntimeException: Echec de la livraison du résultat ResultInfo {who = android: fragment: 1, requête = 22222, résultat = -1, data = Intention {act = inline-data (a des extras)}} à l'activité {com.example.radzik.recipes/com.example.radzik.recipes.activity.MainActivity}: java.lang.NullPointerException: uriString at android.app.ActivityThread.deliverResults (ActivityThread.java:3699) à android.app.ActivityThread.handleSendResult (ActivityThread.java:3742) à android.app.ActivityThread.-wrap16 (ActivityThread.java) à android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1393) à android.os.Handler.dispatchMessage (Handler.java:102) à android.os.Looper.loop (Looper.java:148) à android.app.ActivityThread.main (ActivityThread.java:5417) à java .lang.reflect.Method.invoke (Méthode native) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) à com.android.internal.os.ZygoteInit.main (Zygo teInit.java:616) Causée par: java.lang.NullPointerException:.. uriString à android.net.Uri $ StringUri (Uri.java:475) à android.net.Uri $ StringUri (Uri.java) à android.net.Uri.parse (Uri.java:437) à com.example.radzik.recipes.fragment.ChoosePhotoFragment.getImageUri (ChoosePhotoFragment.java:144) à com.example.radzik.recipes.fragment.ChoosePhotoFragment .onActivityResult (ChoosePhotoFragment.java:135) à android.app.Activity.dispatchActivityResult (Activity.java:6452) à android.app.ActivityThread.deliverResults (ActivityThread.java:3695) à android.app.ActivityThread.handleSendResult (ActivityThread.java:3742) at android.app.ActivityThread.-wrap16 (ActivityThread.java) à l'adresse android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1393) at android.os.Handler.dispatchMessage (Handler .java: 102) à android.os.Looper.loop (Looper.java:148) à android.app.ActivityThread.main (ActivityThread.java:5417) à java.lang.reflect.Method.invoke (méthode native) à com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) à com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

+0

Pouvez-vous poster la totalité du journal d'erreur qui contient également le cadre de la pile? – Sundeep

+0

J'ai mis à jour ma question avec l'erreur complète –

+0

Il semble que l'appel 'insertImage' renvoie null, et par conséquent' path' est 'null'. Voir https://stackoverflow.com/questions/23059580/mediastore-images-media-insertimage-is-returning-null-when-trying-to-save-the-im – Sundeep

Répondre

1

Votre problème est avec getActivity() becasue vous obtenez l'intention de l'activité actuelle, vous étiez sur lequel échouera. Donc, si vous déplacez votre code à OnActivityResult cela va le faire fonctionner.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    //first call super 
    super.onActivityResult(requestCode, resultCode, data); 

    //rest of your code 
} 

Ne pas oublier d'ajouter

<uses-permission android:name="android.permission.CAMERA" /> 

et/ou sans dépend de votre application

<uses-feature android:name="android.hardware.camera" /> 
+0

Fait une erreur en question, c'est dans onActivityResult. Merci d'avoir fait remarquer cela! –