2017-03-01 45 views
-4

我點擊Image並在ImageView中顯示它。下面是我的代碼。下面的代碼在授予權限時執行。單擊圖像並在ImageView中顯示它

private void clickImage() { 

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    imageFile = new File(itemName.getText().toString()+".jpg"); 
    Uri tempuri = Uri.fromFile(imageFile); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT,tempuri); 
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1); 
    startActivityForResult(intent,0); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == 0) 
    { 
     switch (resultCode){ 
      case Activity.RESULT_OK: 
        Log.d("path",imageFile.getAbsolutePath()); 
        Toast.makeText(this,"file saved"+imageFile.getAbsolutePath(),Toast.LENGTH_LONG).show(); 
        ImageView imv = (ImageView) findViewById(R.id.itemImage); 
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        imv.setImageBitmap(photo); 


       break; 
      case Activity.RESULT_CANCELED: 

       break; 
      default:break; 
     } 
    } 
} 

錯誤日誌。

03-01 17:51:47.183 5883-5883/com.lab.yourhomebasket E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: com.lab.yourhomebasket, PID: 5883 
                    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=null} to activity {com.lab.yourhomebasket/com.lab.yourhomebasket.AddItemActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference 
                     at android.app.ActivityThread.deliverResults(ActivityThread.java:3720) 
                     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3763) 
                     at android.app.ActivityThread.-wrap16(ActivityThread.java) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1403) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5443) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
                    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference 
                     at com.lab.yourhomebasket.AddItemActivity.onActivityResult(AddItemActivity.java:107) 
                     at android.app.Activity.dispatchActivityResult(Activity.java:6470) 
                     at android.app.ActivityThread.deliverResults(ActivityThread.java:3716) 
                     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3763)  
                     at android.app.ActivityThread.-wrap16(ActivityThread.java)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1403)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:5443)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)  

我正在使用moto g3進行測試。圖像沒有顯示在我的ImageView中。請幫忙。

回答

1

引用the documentation for ACTION_IMAGE_CAPTURE

調用者可以通過一個額外的EXTRA_OUTPUT來控制,其中該圖像將被寫入。如果EXTRA_OUTPUT不存在,則在額外字段中將小圖像作爲位圖對象返回。這對於只需要小圖像的應用程序很有用。如果EXTRA_OUTPUT存在,則全尺寸圖像將被寫入EXTRA_OUTPUT的Uri值。

您正在使用EXTRA_OUTPUT。因此,data.getExtras().get("data")將不起作用。如果您使用的是EXTRA_OUTPUT,則不需要向您發送dataIntent

而應將圖像寫入您提供給EXTRA_OUTPUT的位置。