我想从图库中获取图像并替换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
答案 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);
}