无法使用Fragment从图库中获取图像

时间:2014-11-20 07:02:33

标签: java android

我想从图库中获取图像并替换imageView的初始图像。但即使选择图库中的图像,它也不会改变。

我检查了它是否正常工作,直到某个地方使用断点。似乎是onActivityResult的try-catch的以下代码部分。

InputStream in = getActivity().getContentResolver().openInputStream(data.getData());

图像的原因是什么不改变?

public class Fragment1 extends Fragment {

    private static final int REQUEST_GALLERY = 0;
    private int viewWidth, viewHeight;
    private ImageView imageView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceBundle){

        final View view = inflater.inflate(R.layout.fragment_person_create, container, false);
        Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.image);
        imageView = (ImageView) view.findViewById(R.id.image_id);
        imageView.setImageBitmap(bmp);
        imageView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // To Gallery
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(intent, REQUEST_GALLERY);
            }
        });
        Button btn = (Button)view.findViewById(R.id.bt_saveperson);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText name = (EditText)view.findViewById(R.id.et_name);
                /* save data */
            }
        }
        return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == REQUEST_GALLERY && resultCode == Activity.RESULT_OK) {
            try {
                InputStream in = getActivity().getContentResolver().openInputStream(data.getData());
                Bitmap bitmap = BitmapFactory.decodeStream(in);
                in.close();
                imageView.setImageBitmap(bitmap);
            } catch (Exception e) {
            }
        } 
    }
}

更新

    public String getAbsolutePath(Uri uri) {
        Log.v("tag", "666");
        if(Build.VERSION.SDK_INT >= 19){
            Log.v("tag", "777");
            String id = uri.getLastPathSegment().split(":")[1];
            Log.v("tag", "888");
            final String[] imageColumns = {MediaStore.Images.Media.DATA };
            final String imageOrderBy = null;
            Uri tempUri = getUri();
            Cursor imageCursor = getActivity().getContentResolver().query(tempUri, imageColumns,MediaStore.Images.Media._ID + "="+id, null, imageOrderBy);
            if (imageCursor.moveToFirst()) {
                return imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
            }else{
                return null;
            }
        }else{
            String[] projection = { MediaColumns.DATA };
            Cursor cursor = getActivity().getContentResolver().query(uri, projection, null, null, null);
            if (cursor != null) {
                int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
                cursor.moveToFirst();
                return cursor.getString(column_index);
            } else
                return null;
            }
        }
    }
    private Uri getUri() {
        String state = Environment.getExternalStorageState();
        if(!state.equalsIgnoreCase(Environment.MEDIA_MOUNTED))
            return MediaStore.Images.Media.INTERNAL_CONTENT_URI;

        return MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    }

logcat的

11-20 05:41:20.295: V/tag(1647)              : 666
11-20 05:41:20.295: V/tag(1647)              : 777
11-20 05:41:20.325: W/EGL_emulation(1647)    : eglSurfaceAttrib not implemented
11-20 05:41:20.575: W/MediaFocusControl(1272):   RemoteControlClient died
11-20 05:41:20.575: I/ActivityManager(1272)  : Killing 1498:com.android.music/u0a32 (adj 15): empty #17
11-20 05:41:20.935: I/ActivityManager(1272)  : Killing 1437:com.android.printspooler/u0a39 (adj 15): empty #17
11-20 05:41:20.975: D/(935): HostConnection: :get() New Host Connection established 0xb7e00a40, tid 1896

2 个答案:

答案 0 :(得分:0)

使用自定义函数获取获取图像位图的绝对路径:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
   if(requestCode == REQUEST_GALLERY && resultCode == Activity.RESULT_OK) {
      try {
          imageView.setImageBitmap(BitmapFactory.decodeFile(getAbsolutePath(data.getData())));
      } catch (Exception e) {
      }
    } 
}

 public String getAbsolutePath(Uri uri) {
    if(Build.VERSION.SDK_INT >= 19){
        String id="";
        if(uri.getLastPathSegment().split(":").length>0){
            id = uri.getLastPathSegment().split(":")[1];
        }else{
            id = uri.getLastPathSegment().split(":")[0];
        }
        final String[] imageColumns = {MediaStore.Images.Media.DATA };
        final String imageOrderBy = null;
        Uri tempUri = getUri();
        Cursor imageCursor = getContentResolver().query(tempUri, imageColumns,MediaStore.Images.Media._ID + "="+id, null, imageOrderBy);
        if (imageCursor.moveToFirst()) {
            return imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
        }else{
            return null;
        }
    }else{
        String[] projection = { MediaColumns.DATA };
        Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } else
            return null;
    }
}

答案 1 :(得分:0)

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == CODE_GALLERY_REQUEST){
        if (grantResults.length >0 && grantResults[0]== PackageManager.PERMISSION_GRANTED){
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(Intent.createChooser(intent,"Select deposit slip"), CODE_GALLERY_REQUEST);

        }else{
            Toast.makeText(getActivity(),"You dont Have permission",Toast.LENGTH_LONG).show();
        }
        return;
    }

    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
相关问题