2014-02-06 4 views
1

Мое приложение, когда пользователь нажимает кнопку фото, он сохранит изображение во внешнем хранилище. На этом лице он работает, когда я просматриваю свою папку на устройстве. Но я не понимаю, почему My намерение равна нулю, в то время как я putExtra в intent.AndОшибка отправки результата ResultInfo android

это мой код

private void captureImage(){ 
    //check Is device support a camera?? 
    isDeviceSupportCamera(); 
    if(isDeviceSupportCamera() == true){ 
     //intent to camera process 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     //สร้างไฟล์ใหม่มาลองรับ รูปที่ถูกถ่าย ไปยัง picDirectory 
     imageFile = new File(Environment.getExternalStorageDirectory()+path, 
        "img_"+System.currentTimeMillis()+".jpg"); 

     startActivityForResult(intent, imageCode); 
    }else{ 
     System.out.println("Your device is not supprot feature camera"); 
    } 

} 

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

    if(requestCode == imageCode && resultCode == RESULT_OK){ 



      //add imageFile to array File 
      fileCapture.add(imageFile); 
      //set adapter 
      gridView.setAdapter(new gridviewAdapter(context, fileCapture)); 


    }else if(requestCode == imageCode && resultCode == RESULT_CANCELED){ 
     Toast.makeText(getApplicationContext(), "user cancle a image capture", Toast.LENGTH_LONG).show(); 
    }else{ 
     Toast.makeText(getApplicationContext(), "Failed to capture", Toast.LENGTH_LONG).show(); 
    } 

} 

и это ошибка

02-07 00:48:05.666: E/AndroidRuntime(18495): FATAL EXCEPTION: main 
02-07 09:37:34.625: E/AndroidRuntime(24772): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { act=inline-data dat=content://media/external/images/media/14298 (has extras) }} to activity {com.example.newlookrecipe/com.example.newlookrecipe.MainActivity}: java.lang.NullPointerException{com.example.newlookrecipe/com.example.newlookrecipe.MainActivity}: java.lang.NullPointerException 
02-07 00:48:05.666: E/AndroidRuntime(18495): at android.app.ActivityThread.deliverResults(ActivityThread.java:3205) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3248) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at android.app.ActivityThread.access$1200(ActivityThread.java:140) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at android.os.Looper.loop(Looper.java:137) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at android.app.ActivityThread.main(ActivityThread.java:4921) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at java.lang.reflect.Method.invokeNative(Native Method) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at java.lang.reflect.Method.invoke(Method.java:511) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at dalvik.system.NativeStart.main(Native Method) 
02-07 00:48:05.666: E/AndroidRuntime(18495): Caused by: java.lang.NullPointerException 
02-07 00:48:05.666: E/AndroidRuntime(18495): at com.example.newlookrecipe.MainActivity.onActivityResult(MainActivity.java:96) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at android.app.Activity.dispatchActivityResult(Activity.java:5390) 
02-07 00:48:05.666: E/AndroidRuntime(18495): at android.app.ActivityThread.deliverResults(ActivityThread.java:3201) 
02-07 00:48:05.666: E/AndroidRuntime(18495): ... 11 more 

ответ

3

LogCat Из источника:

/** 
* Standard Intent action that can be sent to have the camera application 
* capture an image and return it. 
* <p> 
* The caller may pass an extra EXTRA_OUTPUT to control where this image will be written. 
* If the EXTRA_OUTPUT is not present, then a small sized image is returned as a Bitmap 
* object in the extra field. This is useful for applications that only need a small image. 
* If the EXTRA_OUTPUT is present, then the full-sized image will be written to the Uri 
* value of EXTRA_OUTPUT. 
* @see #EXTRA_OUTPUT 
*/ 
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) 
public final static String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE"; 

Примечание Если EXTRA_OUTPUT нет.

Поскольку вы включаете intent.putExtra(MediaStore.EXTRA_OUTPUT, uri.fromFile(imageFile));, вы выражаете Intent(MediaStore.ACTION_IMAGE_CAPTURE) с целью сохранения снятого изображения в файловой системе. Android знает, что вы знаете местоположение изображения, поэтому он не будет беспокоиться о доставке эскиза, который он предоставит, если вы запустили Intent, не указав это дополнительно. Поскольку он не отправляет данные, ваш объект Intent будет иметь значение NULL.

Если вы хотите получить уменьшенное изображение или добавить изображение в изображение, вы можете просто использовать Uri, который вы указали в Intent.

+0

Спасибо Submersed.if Я хочу захватить уменьшенное изображение, я могу получить его из imageFile.getAbsolutePath() ;. теперь я удаляю эту строку из кода. "Intent.putExtra (MediaStore.EXTRA_OUTPUT, uri.fromFile (imageFile)) ; ", Но это все еще ошибка. Можете ли вы проверить его еще раз, пожалуйста. – user3001046

+0

Итак, посмотрев код, который вы указали, не похоже, что вы даже обращаетесь к объекту Intent в onActivityResult. Вы уверены, что объект намерения, являющийся нулевым, является проблемой, или это ваш файл fileCapture или gridView? – Submersed

+1

Кроме того, это может помочь следить за документами по обучению: http://developer.android.com/training/camera/photobasics.html a – Submersed

Смежные вопросы