Reputation: 568
I want to pick a photo from gallery or camera on Android and show the photo on ImageView, open gallery or camera was fine and there's no problem with permission. But the problem is, the picture that I select or I take from the camera was not shown on ImageView, and there's no error.
Below is my code
private static final int CAMERA_REQUEST_CODE = 1;
private static final int SELECT_FILE = 0;
public PersonalDataStep(){
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.personal_data_step, container, false);
ButterKnife.bind(this, view);
//imageEktp.setClickable(true);
getPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Log.d("test : ", "testing");
CharSequence menu[] = new CharSequence[]{"Take From Galery", "Open Camera"};
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Pick a Picture");
builder.setItems(menu, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(i == 0){
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(intent, SELECT_FILE);
}else if(i == 1){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_REQUEST_CODE);
}
}
});
builder.show();
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode== Activity.RESULT_OK) {
if (resultCode == CAMERA_REQUEST_CODE) {
Bundle bundle = data.getExtras();
final Bitmap bitmap = (Bitmap) bundle.get("data");
imageEktp.setImageBitmap(bitmap);
} else if (resultCode == SELECT_FILE) {
Uri selectedImage = data.getData();
imageEktp.setImageURI(selectedImage);
Log.d("image from galery : ", selectedImage.toString());
}
}else{
Toast.makeText(getActivity(), "You haven't picked Image",Toast.LENGTH_LONG).show();
}
}
Upvotes: 0
Views: 142
Reputation: 1453
Try it, a little change to your method, it works well for me.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode== Activity.RESULT_OK) {
if (requestCode == CAMERA_REQUEST_CODE && data! = null) {
Uri mImageCaptureUri = data.getData();
imageEktp.setImageURI(mImageCaptureUri);
} else if (requestCode == SELECT_FILE && data != null) {
Uri selectedImage = data.getData();
imageEktp.setImageURI(selectedImage);
Log.d("image from galery : ", selectedImage.toString());
}
}else{
Toast.makeText(getActivity(), "You haven't picked Image",Toast.LENGTH_LONG).show();
}
}
Upvotes: 1
Reputation: 2406
Small typo in your code
if (resultCode == CAMERA_REQUEST_CODE) {
...
} else if (resultCode == SELECT_FILE) {
...
}
Should be
if (requestCode == CAMERA_REQUEST_CODE) {
...
} else if (requestCode == SELECT_FILE) {
...
}
Upvotes: 1
Reputation: 9225
try this code:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == SELECT_FILE)
onSelectFromGalleryResult(data);
else if (requestCode == REQUEST_CAMERA)
onCaptureImageResult(data);
}
}
@SuppressWarnings("deprecation")
private void onSelectFromGalleryResult(Intent data) {
Bitmap bm=null;
if (data != null) {
try {
bm=MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(),
data.getData());
} catch (IOException e) {
e.printStackTrace();
}
}
ivImage.setImageBitmap(bm);
}
private void onCaptureImageResult(Intent data) {
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
File destination = new File(Environment.getExternalStorageDirectory(),
System.currentTimeMillis() + ".jpg");
FileOutputStream fo;
try {
destination.createNewFile();
fo = new FileOutputStream(destination);
fo.write(bytes.toByteArray());
fo.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ivImage.setImageBitmap(thumbnail);
}
i think it helps you please check your code once.
Upvotes: 1