2013-10-25 16 views
0

我正在試圖拍照並在ImageView中顯示。如果我嘗試從圖庫中填充ImageView,它可以很好地工作,但是如果我使用相機拍攝照片,則不起作用。Android - 爲什麼ImageView是空的?

下面是我在做什麼:

//選擇採取從相機或畫廊

public class ProfileFragment extends Fragment  
..... 
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
builder.setTitle("Escolha a Foto"); 
builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface dialog, int item) { // pick from 
                   // camera 
      if (item == 0) { 

       Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(takePicture, 0);//zero can be replced with any action code 
      } else { 
       // pick from file 
       Intent pickPhoto = new Intent(Intent.ACTION_PICK, 
          android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(pickPhoto , 1);//one can be replced with any action code 
      } 
     } 
    }); 
.... 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, 
     Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
    switch (requestCode) { 
    case 0: 
     if (resultCode == -1) { 
      Uri selectedImage = imageReturnedIntent.getData(); 
      imageView.setImageURI(selectedImage); 
     } 

     break; 
    case 1: 
     if (resultCode == -1) { 
      Uri selectedImage = imageReturnedIntent.getData(); 
      imageView.setImageURI(selectedImage); 
     } 
     break; 
    } 
} 

private void captureImageInitialization() { 

    final String[] items = new String[] { "New Photo", 
      "Choose from Gallery" }; 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
      android.R.layout.select_dialog_item, items); 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    builder.setTitle("Choose Photo"); 
    builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int item) { 
      if (item == 0) { 
       Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(takePicture, 0);//zero can be replced with any action code 
      } else { 

       Intent pickPhoto = new Intent(Intent.ACTION_PICK, 
          android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(pickPhoto , 1);//one can be replced with any action code 
      } 
     } 
    }); 

    dialog = builder.create(); 
} 


在有什麼不對任何想法?

UPDATE:從片段的方法「onCreateView()」後,被稱爲保存照片......這就是爲什麼ImageView的是空的...我怎樣才能解決這個問題?

UPDATE2:從mainActivity的onCreate()被調用的一切,我用相機的時間。

在此先感謝。

+0

你可以請顯示整個代碼,如適配器...? –

+0

那個switch語句沒有任何意義。您可以在開關你的情況檢查的價值,並再次無論是'-1' – tolgap

+0

ops..the值-1大約resultCode爲從「onActivityResult」和0 =採取從相機,1從畫廊 – placplacboom

回答

0

嘗試這樣

始終使用intent.getExtras().get("data")你需要從相機拍攝的圖像類型轉換爲Bitmap

case 0: 
     if (resultCode == Activity.RESULT_OK) { 
     Bitmap bitmapImage = (Bitmap) imageReturnedIntent.getExtras().get("data"); 
     imageView.setImageBitmap(bitmapImage); 

     } 

     break; 
    case 1: 
     if (resultCode == Activity.RESULT_OK) { 
      Uri selectedImage = imageReturnedIntent.getData(); 
      imageView.setImageURI(selectedImage); 
     } 
     break; 
    } 
+0

同樣的問題。仍然是空的,只有當我從畫廊中選擇的作品! – placplacboom

+0

@DavidL。你有沒有添加這些權限?

+0

是的!問題是,保存照片之後,再次呼籲「onCreateView」具有拍照功能的片段:(...我怎樣才能避免呢? – placplacboom

0

也心目中,有一個錯誤(主要是注意到了三星的設備,我沒有當前信息是否固定或不),其中getData()返回null。是的話,你就需要使用前置入烏里如下:

onActivityResult()方法
preinsertedUri = getContentResolver().insert(  
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues()); 

後:

Uri imageUri = preinsertedUri; 

這樣我就能夠防止Uri被空在一些三星設備

+0

URI是不是空的。當我拍了一張照片,對象「內URI selectImaged'的值爲「content:// media/external/images/media/57」,但是當返回激活時,ImageView是空的......它看起來很喜歡我拍攝的照片並且不會保存照片:( – placplacboom

-1

只需添加清單中的那些行:

android:configChanges="keyboardHidden|orientation|screenSize"