2015-11-23 126 views
0

我正在實施相機應用程序。我從相機中捕獲圖像並將其保存到DCIM文件夾中,並將該圖像顯示在ImageView中。圖像成功存儲到DCIM文件夾中,但未在ImageView中以全屏尺寸顯示。並且我的應用程序崩潰並且出現錯誤Android:圖像不顯示在圖像視圖從相機

Uri selectedImageUri = data.getData();是空對象引用。

這裏是我的代碼

public class MainActivity extends ActionBarActivity { 
    Button b1,b2; 
    ImageView iv;private File output=null;int CONTENT_REQUEST =9999; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     b1=(Button)findViewById(R.id.button); 
     iv=(ImageView)findViewById(R.id.imageView); 

     b1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      { 
       Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 

       output = new File(dir, "CameraContentDemo.jpeg"); 

       intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output)); 
       startActivityForResult(intent, CONTENT_REQUEST); 
      } 
     }); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     // Bitmap bmp = BitmapFactory.decodeFile(urImageFilePath); 
     if (requestCode == CONTENT_REQUEST) 
     { 
      if (resultCode == RESULT_OK) 
      { 
       try{ 
        Uri selectedImageUri = data.getData(); 
        Log.e("selectedImageUri "," = " + selectedImageUri); 
        if(selectedImageUri!=null){ 

         Bitmap bmp= BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri)); 
         Log.e("bmp "," = " + bmp); 
         iv.setImageBitmap(bmp); 
         Log.e("bmp ", " Displaying Imageview WIth Bitmap !!!! = "); 
        } 
       } 
       catch (FileNotFoundException fe) 
       { 
        fe.printStackTrace(); 
       } 
      }} 

這裏是Menifest.xml相機許可文件

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

,這裏是我的logcat錯誤

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=9999, result=-1, data=null} to activity {com.example.tazeen.demo3/com.example.tazeen.demo3.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3568) 
      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3611) 
      at android.app.ActivityThread.access$1400(ActivityThread.java:147) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5254) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference 
      at com.example.tazeen.demo3.MainActivity.onActivityResult(MainActivity.java:55) 
      at android.app.Activity.dispatchActivityResult(Activity.java:6135) 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3564) 
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3611) 
            at android.app.ActivityThread.access$1400(ActivityThread.java:147) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1345) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5254) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
11-23 15:10:34.367  647-1092/? E/ActivityManager﹕ Invalid thumbnail dimensions: 384x384 
+0

\ <使用的許可機器人:名稱= 「android.permission.WRITE_EXTERNAL_STORAGE」/> <使用的許可機器人:名稱= 「android.permission.READ_EXTERNAL_STORAGE」/> –

+0

我這個兩個語法menifest文件但得到相同的錯誤=引起:java.lang.NullPointerException:嘗試調用com.example.tazeen.demo3上的空對象引用 上的虛擬方法'android.net.Uri android.content.Intent.getData()'。 MainActivity.onActivityResult(MainActivity.java:55) –

+0

其實際返回null –

回答

1

這是因爲採取位圖從相機意圖將不存在data.getData(),如果您選擇了已經在磁盤中的文件,則data.getData()將是該文件資源的URI。從攝像頭活動所拍攝的照片不存儲,但保持在內存位圖,並傳遞給父活動的onActivityResult在意向的羣衆演員,你得到這個位圖的方式是像這樣

data.getExtras().get("data");

所以改變你的代碼會是這樣,

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     // Bitmap bmp = BitmapFactory.decodeFile(urImageFilePath); 
     if (requestCode == CONTENT_REQUEST) 
     { 
      if (resultCode == RESULT_OK) 
      { 
       try{ 
        Uri selectedImageUri = data.getData(); 
        Log.e("selectedImageUri "," = " + selectedImageUri); 
        if(selectedImageUri!=null){ 

         Bitmap bmp= BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri)); 
         Log.e("bmp "," = " + bmp); 
         iv.setImageBitmap(bmp); 
         Log.e("bmp ", " Displaying Imageview WIth Bitmap !!!! = "); 
        } else { 
         // If selectedImageUri is null check extras for bitmap 
         Bitmap bmp = (Bitmap) data.getExtras().get("data"); 
         iv.setImageBitmap(bmp); 
        } 
       } 
       catch (FileNotFoundException fe) 
       { 
        fe.printStackTrace(); 
       } 
      }} 

編輯1

這是怎麼做的意圖,推出面向結果的攝像頭活動,

final int CHOOSE_CAMERA = 232; 
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CHOOSE_CAMERA); 
+0

仍然收到相同的錯誤。 –

+0

@ p.ld哦所以數據本身是空的? – Bhargav

+0

@ p.ld檢查編輯的答案 – Bhargav

相關問題