2012-02-10 40 views
8

Ok vì vậy đây đây là mục đích tôi đang gửionActivityResult trả về với dữ liệu = 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); 

Và sau đó trong onActivityResult tôi đang làm điều này:

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); 
    } 

Các LogCat đang hiển thị một NullPointerException tại dòng có nội dung Hình ảnh đã lưu ....
Và điều này:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

Điều này xảy ra nếu tôi cố gắng sử dụng đối tượng data hoặc trường fileUri của lớp học của tôi.
Tại sao dữ liệu được trả về null?
Tại sao nó mặc dù tôi đang sử dụng một lĩnh vực của lớp tôi vẫn nhận được cùng một lỗi?

+0

R u không sử dụng getIntent() để truy cập MediaStore.EXTRA_OUTPUT trong kết quả onActivity –

+0

không. không chắc chắn cách sử dụng nó. Bạn có thể cho tôi một đoạn mã không? – prometheuspk

+0

intent.putExtra (MediaStore.EXTRA_OUTPUT, fileUri); Trong Result_OK của Activity sử dụng Uri u = data.getData(); để có được uri Ngoài ra hãy chắc chắn fileUri là Uri không phải tên tập tin .. –

Trả lời

8

Bất cứ khi nào bạn tiết kiệm một hình ảnh bằng cách thông qua EXTRAOUTPUT với mục đích camera tức

intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

trong một tập tin, tham số dữ liệu bên trong onActivityResult luôn trả về null. Vì vậy, thay vì sử dụng dữ liệu để truy xuất hình ảnh, hãy sử dụng filepath để truy xuất Bitmap.

Vì vậy onActivityResult sẽ là một cái gì đó như thế này:

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); 
    } 

Hãy chắc chắn rằng bạn đã thực hiện imageUri hoặc fileUri như là một biến toàn cầu để bạn có thể truy cập nó bên onActivityResult là tốt. Tốt nhất của may mắn

0

Cách đúng/ưa thích để xử lý dữ liệu trong những trường hợp này sẽ là:

Trong Hoạt động gọi thiết lập dữ liệu để tiếp cận mục đích, sau đó setResult mã như RESULT_OK và sau đó kết thúc hoạt động đó.

Trong hoạt động recieving này, kiểm tra mã kết quả .. và lấy dữ liệu từ biến Ý định như: intent.getExtra("... "); // Các biến mà bạn đã thiết lập trong hoạt động đứa trẻ đó đã bị đóng cửa bây giờ ..

+0

bạn hiểu sai tôi. Tôi thực sự đang gọi ứng dụng máy ảnh của riêng điện thoại. Tôi không cần thiết lập kết quả. – prometheuspk