【问题标题】:Android - Why ImageView is empty?Android - 为什么 ImageView 是空的?
【发布时间】:2014-05-08 02:45:03
【问题描述】:

我正在尝试拍照并在 ImageView 中显示。如果我尝试从图库中填充 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();
}


有什么问题吗?

更新:保存照片后调用片段中的方法“onCreateView()”...这就是 ImageView 为空的原因...我该如何解决?

UPDATE2:在我使用相机时,mainActivity 中的 onCreate() 会一直被调用。

提前致谢。

【问题讨论】:

  • 能否请您显示整个代码,如适配器...?
  • 那个 switch 语句没有意义。您检查开关中的值,并在您的情况下再次检查它是否为-1
  • ops..值 -1 是关于“onActivityResult”的结果代码,0 = 从相机拍摄,1 = 从图库中选择
  • @Haresh 我已经插入了填充 ArrayAdapter 的代码
  • resultCode == -1 应该是什么意思?没有为结果代码定义一个常量吗?

标签: android android-fragments android-imageview


【解决方案1】:

这样试试

始终使用 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;
    }

【讨论】:

  • 同样的问题。仍然是空的,只有在我从画廊中选择时才有效!
  • @DavidL。您是否添加了这些权限?
  • 是的!问题是保存照片后,它在具有照片功能的片段内再次调用“onCreateView”:( ...我该如何避免它?
【解决方案2】:

还请记住,getData() 返回 null 存在一个错误(主要在三星设备上发现,我没有当前信息是否已修复)。是这样的话,你需要使用一个预先插入的 Uri,如下所示:

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

稍后在onActivityResult()方法中:

Uri imageUri = preinsertedUri;

通过这种方式,我能够防止 Uri 在某些三星设备上为空

【讨论】:

  • URI 不为空...当我拍照时,对象 'URI selectImaged' 的值为 "content://media/external/images/media/57" 但返回时activy,ImageView 是空的...看起来我拍了照片但照片没有保存:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
相关资源
最近更新 更多