2012-02-10 97 views
8

好了,所以在這裏,這是我送onActivityResult數據返回= NULL

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name 
startActivityForResult(intent, REQUEST_CODE); 

,並且打算再在onActivityResult我這樣做:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.i("Intent name:",data.toString()); 
     if (requestCode == REQUEST_CODE){ 
      if (resultCode == Activity.RESULT_OK){ 
       Toast.makeText(this, "Image saved to \n" + fileUri.toString() , Toast.LENGTH_LONG).show(); 
       Toast.makeText(this, "Result Code: " + resultCode , Toast.LENGTH_LONG).show(); 
       //Bitmap mBitMap = BitmapFactory.decodeFile(data.getData().toString()); 
       //imageView.setImageBitmap(mBitMap); 
      } 
      else if (resultCode == RESULT_CANCELED){ 
       Toast.makeText(this, "Capture Cancelled", Toast.LENGTH_LONG).show(); 
      } 
      else { 
       Toast.makeText(this, "Capture failed", Toast.LENGTH_LONG).show(); 
      } 

     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 

的logcat的是表示一個NullPointerException表示保存的圖像....
而且這也是:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

無論我嘗試使用我的課程的data對象還是fileUri字段,都會發生這種情況。
爲什麼數據返回null
爲什麼即使我正在使用類的字段,我仍然得到相同的錯誤?

+0

的Rü不使用getIntent()用於訪問MediaStore.EXTRA_OUTPUT在onActivity結果 – 2012-02-10 17:17:28

+0

都能跟得上。不知道如何使用它。你能給我一個代碼片段嗎? – prometheuspk 2012-02-10 17:19:29

+0

intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);在Activity的Result_OK中使用Uri u = data.getData();得到uri還要確保fileUri是Uri不是文件名.. – 2012-02-10 17:34:28

回答

8

當你保存通過在文件傳遞EXTRAOUTPUT帶攝像頭的意圖即

intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

的形象,onActivityResult裏面的數據參數,它總是返回null。因此,使用文件路徑檢索Bitmap而不是使用數據檢索圖像。

所以onActivityResult會是這樣的:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == REQUEST_CODE) { 
     if (resultCode == Activity.RESULT_OK) { 
      String[] fileColumn = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContentResolver().query(imageUri, 
       fileColumn, null, null, null); 
      String contentPath = null; 
      if (cursor.moveToFirst()) { 
       contentPath = cursor.getString(cursor 
        .getColumnIndex(fileColumn[0])); 

       Bitmap bmp = BitmapFactory.decodeFile(contentPath); 
       ImageView img = (ImageView) findViewById(R.id.imageView1); 
       img.setImageBitmap(bmp); 


      } else if (resultCode == RESULT_CANCELED) { 
       Toast.makeText(this, "Capture Cancelled", Toast.LENGTH_LONG) 
       .show(); 
      } else { 
       Toast.makeText(this, "Capture failed", Toast.LENGTH_LONG) 
       .show(); 
      } 

     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 

確保你已經採取imageUri或fileURI所爲全局變量,以便可以在裏面onActivityResult訪問它。好運

0

來處理在這些情況下數據將如下所述的正確的/優選的方式:

在稱爲活動設置數據到意圖,然後的setResult代碼RESULT_OK然後完成該活動。

在這種recieving活動,檢查結果代碼..和檢索意圖可變數據爲:intent.getExtra("... "); //您在已關閉,現在孩子活動而設置的變量..

+0

你誤解我。我實際上是打電話給自己的相機應用程序。我不需要自己設定結果。 – prometheuspk 2012-02-10 21:15:05

相關問題