Android 相机意图在索尼手机中引发空指针异常

Android 相机意图在索尼手机中引发空指针异常,android,sony,android-camera-intent,Android,Sony,Android Camera Intent,我想要的是照相机意图,它可以在除索尼C2305[4.2.2]以外的其他设备上完美运行。在4.2.2模拟器上进行测试,该模拟器运行良好 下面是代码片段。我使用呼叫摄像机意图 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); getImagePath(); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(int

我想要的是
照相机意图
,它可以在除
索尼C2305
[4.2.2]以外的其他设备上完美运行。在4.2.2模拟器上进行测试,该模拟器运行良好

下面是代码片段。我使用呼叫
摄像机意图

 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 getImagePath();
 intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
 startActivityForResult(intent, REQUEST_CAMERA);

将活动的结果获取为:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
   if (requestCode == REQUEST_CAMERA) {
            if(resultCode == RESULT_OK)
            {
                BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
                btmapOptions.inSampleSize = 2;
                bm = BitmapFactory.decodeFile(currentFileUri.getPath(), btmapOptions);
                NewExpensesActivity.this.data.add(bm);
                imagesAdapter.notifyDataSetChanged();
                    compressedPath = ImageCompression.compressImage(currentFileUri.getPath());//ADDED 10018
                    galleryAddPic();
                    paths.add(compressedPath);//EDITED 10018

            }
        }
          }
但它在传递结果时抛出空指针异常 日志类别:


在这里,您没有在
tempFile
中提供任何图像名称,因此拍摄的图像可以使用该名称保存在SD卡中

现在,比如说,图像名称将是
123.jpg
…替换这个

File tempFile = new File(Environment.getExternalStorageDirectory().getPath()+"/ABC";);

File tempFile = new File(Environment.getExternalStorageDirectory().getPath()+"/ABC/123.jpg");

摄像机意图

           try {
                Log.d("Main Activity", "Camera");

                String fileName = "temp.jpg";  
                ContentValues values = new ContentValues();  
                values.put(MediaStore.Images.Media.TITLE, fileName);  
                mImageCaptureUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
                intent.putExtra(MediaStore.EXTRA_OUTPUT,mImageCaptureUri);  

                startActivityForResult(intent, 2);
            } catch (Exception e) {
                // TODO Auto-generated catch block

            }
       protected void onActivityResult(final int requestCode,final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d("Main Activity", "On Activity Result");


    try {
        Uri selectedImage=null;

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

            /* Log.d("Main Activity", "Camera");
              File fi = new File("/sdcard/tmp");
                 try {
                   selectedImage = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), fi.getAbsolutePath(), null, null));
                     if (!fi.delete()) {
                         Log.i("logMarker", "Failed to delete " + fi);
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }*/
            selectedImage=mImageCaptureUri;
            /*          mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
                       "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
            selectedImage=mImageCaptureUri;*/
        }
        if(selectedImage==null)
        {
            Log.d("Main Activity","Back");
            return;
        }



    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.d("Main Activity","Exception");
        return;
    }      
    return;

}
onActivityResult

           try {
                Log.d("Main Activity", "Camera");

                String fileName = "temp.jpg";  
                ContentValues values = new ContentValues();  
                values.put(MediaStore.Images.Media.TITLE, fileName);  
                mImageCaptureUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
                intent.putExtra(MediaStore.EXTRA_OUTPUT,mImageCaptureUri);  

                startActivityForResult(intent, 2);
            } catch (Exception e) {
                // TODO Auto-generated catch block

            }
       protected void onActivityResult(final int requestCode,final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d("Main Activity", "On Activity Result");


    try {
        Uri selectedImage=null;

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

            /* Log.d("Main Activity", "Camera");
              File fi = new File("/sdcard/tmp");
                 try {
                   selectedImage = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), fi.getAbsolutePath(), null, null));
                     if (!fi.delete()) {
                         Log.i("logMarker", "Failed to delete " + fi);
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }*/
            selectedImage=mImageCaptureUri;
            /*          mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
                       "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
            selectedImage=mImageCaptureUri;*/
        }
        if(selectedImage==null)
        {
            Log.d("Main Activity","Back");
            return;
        }



    } catch (Exception e) {
        // TODO Auto-generated catch block
        Log.d("Main Activity","Exception");
        return;
    }      
    return;

}

selectedImage是捕获图像的Uri,在索尼手机中工作正常。

where is
AddSxActivity.java:485
?检查onActivityResult中AddSxActivity.java类中的代码。你在那里得到了一些东西。另外,请发布您的全部活动代码。@SiddharthVyas:但同样的应用程序在其他手机上也可以正常工作。正是索尼导致了这些NPE。请检查编辑的SO。@Shayanpourvatan第485行:
bm=BitmapFactory.decodeFile(currentFileUri.getPath(),btmapOptions)
在其他手机上运行非常平稳,但没有抛出NPE。把它放在try-and-catch块中,现在让我们看看。我已经在传递那个些变量,正如你们所描述的那个样。请参阅。