2012-04-20 18 views
0

這是我的代碼:拍照給E中的空指針異常

String _path = Environment.getExternalStorageDirectory() + File.separator + "temp.jpg"; 
          File file = new File(_path); 
          Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);    
          Uri pictureUri = Uri.fromFile(file); 
          cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri); 
          startActivityForResult(cameraIntent, CAMERA_REQUEST); 

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
      switch(requestCode){ 
       case CAMERA_REQUEST:{ 
        Bitmap bmp = (Bitmap) data.getExtras().get("data");  

,我已經在清單中增加:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 

我在做什麼錯?我最初想要的是保存圖像?

的logcat:

04-20 10:08:38.547: E/AndroidRuntime(219): Uncaught handler: thread main exiting due to uncaught exception 
04-20 10:08:38.557: E/AndroidRuntime(219): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {com.vimateam.android.bestgreekbeaches/com.vimateam.android.bestgreekbeaches.Gallery1}: java.lang.NullPointerException 
04-20 10:08:38.557: E/AndroidRuntime(219): at android.app.ActivityThread.deliverResults(ActivityThread.java:3329) 
04-20 10:08:38.557: E/AndroidRuntime(219): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3371) 
04-20 10:08:38.557: E/AndroidRuntime(219): at android.app.ActivityThread.access$2700(ActivityThread.java:119) 
04-20 10:08:38.557: E/AndroidRuntime(219): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1893) 
04-20 10:08:38.557: E/AndroidRuntime(219): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-20 10:08:38.557: E/AndroidRuntime(219): at android.os.Looper.loop(Looper.java:123) 
04-20 10:08:38.557: E/AndroidRuntime(219): at android.app.ActivityThread.main(ActivityThread.java:4363) 
04-20 10:08:38.557: E/AndroidRuntime(219): at java.lang.reflect.Method.invokeNative(Native Method) 
04-20 10:08:38.557: E/AndroidRuntime(219): at java.lang.reflect.Method.invoke(Method.java:521) 
04-20 10:08:38.557: E/AndroidRuntime(219): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-20 10:08:38.557: E/AndroidRuntime(219): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-20 10:08:38.557: E/AndroidRuntime(219): at dalvik.system.NativeStart.main(Native Method) 
04-20 10:08:38.557: E/AndroidRuntime(219): Caused by: java.lang.NullPointerException 
+1

它會更容易回答,如果你能告訴我們到底是哪行觸發例外 – saarraz1 2012-04-20 10:21:36

+0

您可以發佈您logcat的,所以我們可以清楚地看到哪裏出了問題。 – cstrutton 2012-04-20 10:32:11

+0

ok,添加了logcat – ghostrider 2012-04-20 10:33:58

回答

0

你越來越數據部分空BEZ你不設置intent.setDataAndType()當你開始Acitivty.if你想利用數據Bitmap然後開始CAMRA活動爲:

public static final String IMAGE_UNSPECIFIED = "image/*"; 
    Intent intent = new Intent(Intent.ACTION_PICK, null); 
    intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED); 
    startActivityForResult(intent, 3); 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == 0) 
     return; 
    if (requestCode == 2) { 
     Uri uri=data.getData(); //YOU GET DATA HERE 
     } 
//OR 
if (requestCode == 3) { 
Bundle extras = data.getExtras(); 
if (extras != null) { 
Bitmap photo = extras.getParcelable("data"); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0 - 100)???? 
imageView.setImageBitmap(photo); 
    } 
} 

或在您的情況下獲得圖像路徑使用:

if (requestCode == CAMERA_REQUEST) { 
    //pic path 
     File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg"); 
    } 
0

這是相機中的代碼並保存圖像到SD卡:

private static final int CAMERA_REQUEST = 1888; 
    buttonTakePicture.setOnClickListener(new Button.OnClickListener() { 
       @Override 
       public void onClick(View arg0) { 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    intent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri()); 

    startActivityForResult(intent, CAMERA_REQUEST); 
        } 
      }); 

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

      if (requestCode == CAMERA_REQUEST) { 
        photo = (Bitmap) data.getExtras().get("data"); 
       } 
    } 

    private Uri getImageUri() { 


      File file1 = new File(Environment.getExternalStorageDirectory() + "/Camerafolder"); 
      if (!file1.exists()) 
      { 
       file1.mkdirs(); 
      } 

      File file = new File(Environment.getExternalStorageDirectory() + "/Camerafolder/"+"img"+".png"); 

    Uri imgUri = Uri.fromFile(file); 

      return imgUri; 
     }