2016-06-21 58 views
4

我遇到了startActivityForResult/onActivityResult問題,其中數據返回null。我使用startActivityForResult(攝像頭)並設法將圖像保存到設備中。Android startActivityForResult在使用相機時返回null到onActivityResult

這是調用攝像頭的活動件

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.upload_new_tire); 
    setUpWings(); 

    imageButton.setOnClickListener(new MyCamera(this)); 
} 

這是我的onActivityResult功能

protected void onActivityResult(int requestCode,int resultCode, Intent data){ 
    Log.i("request, result Code", String.valueOf(requestCode) + " and " + String.valueOf(resultCode)); 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK && data != null){ 
     Bundle extras = data.getExtras(); 
     Bitmap imageBitmap = (Bitmap)extras.get("data"); 
     imageButton.setImageBitmap(imageBitmap); 
    } 
} 

這就是我所說的startActivityForResult並保存圖像到文件。

Uri photoURI = FileProvider.getUriForFile(mContext, 
        "autosoftpro.reusedtire.fileprovider", 
        photoFile); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      mContext.startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO); 

這是錯誤消息,它發生是因爲'意圖數據'爲空。我試圖看看其他類似的帖子,但沒有弄清楚原因。

java.lang.RuntimeException: Failure delivering result 
ResultInfo{who=null, request=1, result=-1, data=null} to activity {autosoftpro.reusedtire/autosoftpro.reusedtire.UploadTireActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference 
+0

您正在使用不同的請求代碼。您的onActivityResult中的「REQUEST_IMAGE_CAPTURE」,但請求中的「REQUEST_TAKE_PHOTO」。話雖如此,你應該先嚐試添加if(resultCode!= RESULT_CANCELED),以確保你有一個有效的響應。除非你有明確的理由,否則你也不需要你的超級通話。 – zgc7009

+0

謝謝你的迴應。它們實際上都等於1,並且如果我不包含條件數據,它確實進入了條件循環!= null –

+0

因此,您的數據實際上是空的(在您發佈的錯誤中很明顯)。唯一一次應該發生的是,如果你取消了你的請求(可以通過'if(resultCode!= RESULT_CANCELED)'檢查來捕獲這個請求。 – zgc7009

回答

2

這是因爲 '意圖數據' 爲空

正如the documentation for ACTION_IMAGE_CAPTURE解釋,有兩種可能性:

  • 你包括在ACTION_IMAGE_CAPTUREIntentEXTRA_OUTPUT。在這種情況下,您不會將Intent中的任何內容退回給onActivityResult(),但您已經知道圖像應該放在哪裏。

  • 你不包括EXTRA_OUTPUT,在這種情況下,data額外將是一個縮略圖`位圖。

要包括EXTRA_OUTPUT,這意味着你不應該檢查data額外費用。相反,請在EXTRA_OUTPUT指定的位置查找圖像。

+0

在我的評論前錯過了這個部分,100%正確,他在調用中明確聲明瞭URI,只是使用它:P – zgc7009