0

Я принимаю, чтобы сделать снимок в моей деятельности, и я получаю эту ошибку:Android сфотографировать - java.lang.NullPointerException

Груза активности ок, когда я нажимаю, чтобы сделать снимок тогда сбоит.

12-24 17:22:19.347: E/AndroidRuntime(32764): FATAL EXCEPTION: main 
12-24 17:22:19.347: E/AndroidRuntime(32764): java.lang.NullPointerException 
12-24 17:22:19.347: E/AndroidRuntime(32764): at java.io.File.fixSlashes(File.java:185) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at java.io.File.<init>(File.java:134) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at com.example.CameraActivity$1.onPictureTaken(CameraActivity.java:287) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:855) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at android.os.Handler.dispatchMessage(Handler.java:107) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at android.os.Looper.loop(Looper.java:194) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at android.app.ActivityThread.main(ActivityThread.java:5449) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at java.lang.reflect.Method.invokeNative(Native Method) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at java.lang.reflect.Method.invoke(Method.java:525) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
12-24 17:22:19.347: E/AndroidRuntime(32764): at dalvik.system.NativeStart.main(Native Method) 

NNNNNNNN nnnnnnnnnnnn nnnnnnnnnnnn nnnnnnnnnnnnnnnn здесь парк моего кода:

private PictureCallback mPicture = new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     Log.e("camera test", "1111"); 
     File pictureFile = new File(outFile); //********* LINE 287 
     if (pictureFile == null){ 
      Log.d(TAG, "Error creating media file, check storage permissions: "); 
      return; 
     } 
     /* 
     imageCrop(data, pictureFile, 0, (int)(1200/720 * top_px), 1200, 1200); 

     Intent returnIntent = new Intent(); 
     returnIntent.putExtra("capturedFile",pictureFile.getAbsolutePath()); 
     setResult(RESULT_OK,returnIntent); 
     finish(); 
     */ 

     try { 
      FileOutputStream fos = new FileOutputStream(pictureFile); 
      fos.write(data); 
      fos.close(); 

      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inJustDecodeBounds = true; 

      Bitmap btemp = BitmapFactory.decodeFile(outFile,options); 

      Log.e("picture captured", options.outHeight + "|" + options.outWidth); 

      Intent returnIntent = new Intent(); 
      returnIntent.putExtra("capturedFile",pictureFile.getAbsolutePath()); 
      setResult(RESULT_OK,returnIntent); 

      finish(); 
     } catch (FileNotFoundException e) { 
      Log.d(TAG, "File not found: " + e.getMessage()); 
     } catch (IOException e) { 
      Log.d(TAG, "Error accessing file: " + e.getMessage()); 
     } 

    } 
}; 

----------------------- КОД ОБНОВЛЕНИЯ ------------------------------------------------ -------------------

У меня есть фрагмент, который вызывает пользовательскую операцию с изображением.

Умышленное прохождение к вызову активности не работает. Если я напечатаю logcat, я вижу намерение в Фрагменте. Но деятельность не получает.

Фрагмент:

Intent intent = new Intent();   
intent.setClass(getActivity(), CameraActivity.class); 


Uri fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 

    intent.putExtra("outFile", fileUri);      

    Log.e(TAG, "" + 
      "------------------------------------------------------ " + 
      "fileUri intent => " + fileUri); 

startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

активность:

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

Intent intent = getIntent(); 
outFile = intent.getStringExtra("outFile"); 

String test = getIntent().getExtras().getString("outFile"); 

Log.i("CameraActivity", "" + 
     "- " + 
     "test intent => " + test); 


Log.e("CameraActivity", "" + 
     "- " + 
     "intent.getStringExtra(outFile) => " + intent.getStringExtra("outFile")); 

Log.e("CameraActivity", "" + 
     "- " + 
     "outFile intent => " + outFile); 

LogCat:

из fragemnt:

12-26 11:12:21.399: E/PostProductFragment(3563): - fileUri intent => file:///mnt/sdcard/Pictures/MyCameraApp/IMG_20141226_111221.jpg 

из журнала активности:

12-26 11:12:21.449: I/CameraActivity(3563): - test intent => null 
12-26 11:12:21.449: E/CameraActivity(3563): - intent.getStringExtra(outFile) => null 
12-26 11:12:21.449: E/CameraActivity(3563): - outFile intent => null 
+1

так что 'outFile' имеет значение null, вы это проверили? –

+1

Проверьте значение 'outFile', вы его инициализировали? – zozelfelfo

+1

Похоже, что ваша переменная outFile имеет значение null. Где вы его инициализируете? Попробуйте использовать Debugger для получения дополнительной информации. – Tobi

ответ

0

Я использовал этот код для съемки фотографий на моем приложении, и это прекрасно работает, попробуйте следующее:

Intent c = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(c, FROM_CAMERA); 


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

     if(requestCode == FROM_CAMERA && resultCode == RESULT_OK && null != data) 
     { 
      Bundle extras = data.getExtras(); 
      Bitmap photo = extras.getParcelable("data"); 

      //Post here your code to get the path of the photo 

     } 

    } 

Надеется, что это помогает вам.

+0

Хия, спасибо за ваш ответ. Я добавил код обновления выше, показывая проблему с нулевым намерением. Не могли бы вы посмотреть, пожалуйста. Спасибо. – Joolah

0

проверка попробовать для

if (data != null) 

, потому что может быть множество причин, чтобы данные были нулевой.

UPDATE:

intent.putExtra("outFile", fileUri); 

в

intent.putExtra("outFile", fileUri.toString()); 
+0

Хия, спасибо за ваш ответ. Я добавил код обновления выше, показывая проблему с нулевым намерением. Не могли бы вы посмотреть, пожалуйста. Спасибо. – Joolah

1

Используйте этот код:

@Override 
    public void onClick(View v) { 

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(cameraIntent, CAMERA_REQUEST); 
    fileUri1 = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 
    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri1); 
      } 
     }); 

после возвращения вызова этого метода:

if (resultCode == RESULT_OK) { 
     if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inSampleSize = 4; 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      ImageView imageView = (ImageView) findViewById(R.id.host_img_showlogo); 
      imageView.setImageBitmap(photo); 
      final Bitmap bitmap = BitmapFactory.decodeFile(fileUri1.getPath(), options); 
      Image_path= fileUri1.getPath();  
     } 
+0

Hiya, спасибо за ваш ответ. Я добавил код обновления выше, показывая проблему с нулевым намерением. Не могли бы вы посмотреть, пожалуйста. Спасибо. – Joolah

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