2013-06-06 5 views
0

Je suis l'implémentation d'une application MMS pour ce que j'utilise l'appareil photo de l'appareil.Après prise de photo, je reçois l'exception ci-dessous après avoir appuyé sur Enregistrer dans l'écran d'affichage de l'image.MediaStore.ACTION_IMAGE_CAPTURE donnant NullPointerException

06-06 17:27:13.640: E/AndroidRuntime(21896): FATAL EXCEPTION: main 
06-06 17:27:13.640: E/AndroidRuntime(21896): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=500, result=-1, data=null} to activity {com.example.nirbhaya/com.example.nirbhaya.TakePic}: java.lang.NullPointerException 
06-06 17:27:13.640: E/AndroidRuntime(21896): at android.app.ActivityThread.deliverResults(ActivityThread.java:2536) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at android.app.ActivityThread.access$2000(ActivityThread.java:117) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:965) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at android.os.Looper.loop(Looper.java:130) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at android.app.ActivityThread.main(ActivityThread.java:3687) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at java.lang.reflect.Method.invokeNative(Native Method) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at java.lang.reflect.Method.invoke(Method.java:507) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at dalvik.system.NativeStart.main(Native Method) 
06-06 17:27:13.640: E/AndroidRuntime(21896): Caused by: java.lang.NullPointerException 
06-06 17:27:13.640: E/AndroidRuntime(21896): at com.example.nirbhaya.TakePic.onActivityResult(TakePic.java:73) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
06-06 17:27:13.640: E/AndroidRuntime(21896): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
06-06 17:27:13.640: E/AndroidRuntime(21896): ... 11 more 

et le code ::

package com.example.nirbhaya; 

public class TakePic extends Activity { 
    private static final int CAMERA_REQUEST = 500; 
    private ImageView imageView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.takepic); 

    this.imageView = (ImageView) findViewById(R.id.imgLoad); 
    Button bt = (Button) findViewById(R.id.btCam); 
    Button picok = (Button) findViewById(R.id.bPicOk); 

    bt.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/"; 
      File newdir = new File(dir); 
      newdir.mkdirs(); 
     int count = 0; 
      // here,counter will be incremented each time,and the picture taken by camera will be stored as 1.jpg,2.jpg and likewise. 
      count++; 
      String file = dir+count+".jpg"; 
      String photo = file; 
      File newfile = new File(file); 
      try { 
       newfile.createNewFile(); 
      } catch (IOException e) {}  

      Uri outputFileUri = Uri.fromFile(newfile); 

      Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

      startActivityForResult(intent, CAMERA_REQUEST); 

     } 
    }); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 
    } 
} 
} 

s'il vous plaît me aider à résoudre. Merci

Répondre

0

Vous vous trompez parce que vous le faites mal.

Si vous transmettez le paramètre supplémentaire MediaStore.EXTRA_OUTPUT avec l'intention de la caméra, l'activité de la caméra écrira l'image capturée sur ce chemin et elle ne renverra pas le bitmap dans la méthode onActivityResult.

Si vous vérifiez le chemin que vous passez, alors vous saurez que la caméra a effectivement écrit le fichier capturé dans ce chemin.

0

je faisais face même problème, mais résolu en utilisant le code suivant,

Write folllowing code before `onCreate()` 

File output; 

Ecrire Après code à l'intérieur onClickListner

Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 
output = new File(dir, "CameraContentDemo.jpeg"); 
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output)); 
startActivityForResult(i, 1); 

intérieur onActivityResult

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

    if (requestCode == 1) { 
     if (resultCode == RESULT_OK) { 
      imgUpload.setImageURI(Uri.fromFile(output)); 
     } 
} 

Liens de référence:

Answer given by CommonsWare

Sample project provided by CommonsWare

+0

i besoin dernière image uri et ont besoin de définir cette image dans imageview – KCRaju

+0

dernière image? pouvez-vous expliquer cela? –

+0

Je mets en œuvre une petite application MMS.Pour que j'utilise appareil photo appareil.Lorsque je lance l'application, il montre un écran avec 2 boutons et un bouton ImageView.First pour ouvrir la caméra et le second bouton pour envoyer MMS.Après appuyer sur Button1 Appareil photo est l'ouverture et l'enregistrement d'image dans la mémoire. Mais j'ai besoin de ce "photo id" pour envoyer des SMS. – KCRaju

Questions connexes