2014-02-18 48 views
0

我正在準備Camera Intent,它可以在除Sony C2305 [4.2.2]之外的其他設備上完美工作。測試4.2.2模擬器,它工作得很好。相機意圖在索尼手機中引發空指針異常

以下是摘錄。我用來調用Camera Intent

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

public void getImagePath() 
     { 
      File imageDirectory =null; 
      String state = Environment.getExternalStorageState(); 
      if (Environment.MEDIA_MOUNTED.equals(state)) 
      { 
       imageDirectory = new File(Environment.getExternalStorageDirectory().getPath()+"/ABC"); 
      } 
      else 
      { 
       imageDirectory = new File(SmartConsultant.getApplication().getApplicationContext().getFilesDir().getAbsolutePath()); 
      } 
      imageDirectory.mkdirs(); 
      File tempFile = new File(imageDirectory, getVideoName()+ AppConstants.EXTENSION); //AppConstants.Extension is .jpg and getVideoName to fetch name of file as per current sys time. 
      outputFileUri = Uri.fromFile(tempFile); 
      currentFileUri = outputFileUri; 
     } 

獲取活動的結果:

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 

      } 
     } 
      } 

但它拋出空指針異常就提供結果 登錄貓:

java.lang.RuntimeException: Unable to resume activity {com.smarthumanoid.com/com.netdoers.com.ui.AddSxActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { act=inline-data dat=file:///storage/sdcard0/SmartConsultant/20140217194718.jpg typ=image/jpeg (has extras) }} to activity {com.smarthumanoid.com/com.netdoers.com.ui.AddSxActivity}: java.lang.NullPointerException 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2899) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2928) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3865) 
at android.app.ActivityThread.access$700(ActivityThread.java:156) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:153) 
at android.app.ActivityThread.main(ActivityThread.java:5299) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { act=inline-data dat=file:///storage/sdcard0/SmartConsultant/20140217194718.jpg typ=image/jpeg (has extras) }} to activity {com.smarthumanoid.com/com.netdoers.com.ui.AddSxActivity}: java.lang.NullPointerException 
at android.app.ActivityThread.deliverResults(ActivityThread.java:3488) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2883) 
... 13 more 
Caused by: java.lang.NullPointerException 
at com.netdoers.com.ui.AddSxActivity.onActivityResult(AddSxActivity.java:485) 
at android.app.Activity.dispatchActivityResult(Activity.java:5371) 
at android.app.ActivityThread.deliverResults(ActivityThread.java:3484) 
... 14 more 
+1

'AddSxActivity.java:485'在哪裏? –

+0

檢查onActivityResult中的AddSxActivity.java類中的代碼。你在那裏得到一些東西。也請張貼您的整個活動代碼。 –

+0

@SiddharthVyas:但同樣的應用程序在其他手機中工作正常。只是索尼導致這些NPE。請檢查編輯的SO。 –

回答

1

相機意向

  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 

      } 

onActivityResult

 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和它在索尼手機工作的罰款。

0

這裏,您在tempFile中沒有提供任何圖像名稱,以便拍攝的圖像可以用SDCard中的該名稱保存。現在

,比方說,形象的名字將是123.jpg ....替換此

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

與...

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

我已經按照您所描述的那樣傳遞了這些變量。請參閱編輯的SO。 –

+0

看到我更新的答案。 –