get actual path of multiple images from URI - java

i am very new to android and coding and i am stuck here.i have a gridview that is showing images from my SDCard. but my gridview not showing anything.
My Uri looks like as below:
[content://com.android.providers.media.documents/document/image%3A252,content://com.android.providers.media.documents/document/image%3A68,content://com.android.providers.media.documents/document/image%3A67,content://com.android.providers.media.documents/document/image%3A172]
i have tried many ways to convert this uri to actual path but nothing work for me
i tried this code but it leads to crash my app:
public String getRealPathFromURI (Uri contentUri) {
String path = null;
String[] proj = { MediaStore.MediaColumns.DATA };
Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
if (cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
path = cursor.getString(column_index);
}
cursor.close();
return path;
}
screen shot
this is how i open gallery:
btnGallery.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("image/*");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
}
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_IMAGE);
}
});
This onActivityResult() Method code:
if (requestCode == PICK_IMAGE_MULTIPLE && resultCode == RESULT_OK && null != data) {
// Get the Image from data
String[] filePathColumn = {MediaStore.Images.Media.DATA};
imagesEncodedList = new ArrayList<String>();
if (data.getData() != null) {
Uri mImageUri = data.getData();
// Get the cursor
Cursor cursor = getContentResolver().query(mImageUri, filePathColumn, null, null, null);
// Move to first row
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imageEncoded = cursor.getString(columnIndex);
cursor.close();
ArrayList<Uri> mArrayUri = new ArrayList<Uri>();
mArrayUri.add(mImageUri);
uriImage = mArrayUri.toString();// this string i store in sqlite
galleryAdapter = new GalleryAdapter(getApplicationContext(), mArrayUri);
gvGallery.setAdapter(galleryAdapter);
gvGallery.setVerticalSpacing(gvGallery.getHorizontalSpacing());
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) gvGallery.getLayoutParams();
mlp.setMargins(0, gvGallery.getHorizontalSpacing(), 0, 0);
} else {
if (data.getClipData() != null) {
ClipData mClipData = data.getClipData();
ArrayList<Uri> mArrayUri = new ArrayList<Uri>();
for (int i = 0; i < mClipData.getItemCount(); i++) {
ClipData.Item item = mClipData.getItemAt(i);
Uri uri = item.getUri();
mArrayUri.add(uri);
uriImage = mArrayUri.toString();//this string store in sqlite
// Get the cursor
Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null);
// Move to first row
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imageEncoded = cursor.getString(columnIndex);
imagesEncodedList.add(imageEncoded);
cursor.close();
galleryAdapter = new GalleryAdapter(getApplicationContext(), mArrayUri);
gvGallery.setAdapter(galleryAdapter);
gvGallery.setVerticalSpacing(gvGallery.getHorizontalSpacing());
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) gvGallery
.getLayoutParams();
mlp.setMargins(0, gvGallery.getHorizontalSpacing(), 0, 0);
}
Log.v("LOG_TAG", "Selected Images" + mArrayUri.size());
}
}
} else if (resultCode == this.RESULT_CANCELED) {
Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show();
}
this is how i get string from sqlite in Adapterclass:
final String image_string = product.getFimage();//get string from sqlite
and send to share prefrence:
SharedPreferences settings = mCtx.getSharedPreferences("image_My_str", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString("img_str", image_string);
editor.commit();
In my display activity i get this string from Shared preference:
SharedPreferences settings = getSharedPreferences("image_My_str", Context.MODE_PRIVATE);
String encodedImage = settings.getString("img_str", "");
and here i convert that string to URi:
Uri mImageUri = Uri.parse(encodedImage);
Log.d("LOG_TAG", "Images URI " + mImageUri);
try {
inputStream = getApplicationContext().getContentResolver().openInputStream(mImageUri);
Log.d("LOG_TAG", "Images File " + inputStream);
bitmap = BitmapFactory.decodeStream(inputStream);
Log.d("LOG_TAG", "Images bitmap " + bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (bitmap != null) {
img.setImageBitmap(bitmap);
}else {
Toast.makeText(EditMapsActivity.this, "image not found", Toast.LENGTH_LONG).show();
}
My URI looks like:
[content://com.android.providers.media.documents/document/image%3A252,content://com.android.providers.media.documents/document/image%3A68,content://com.android.providers.media.documents/document/image%3A67,content://com.android.providers.media.documents/document/image%3A172]

Related

How to edit an image with absolute path?

I have use the pesdk library to edit an image.
public static int GALLERY_RESULT = 2;
private void selectImgtoEdit() {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(path));
startActivityForResult(intent, GALLERY_RESULT);
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Uri selectedImage = intent.getData();
openEditor(selectedImage);
}
public void openEditor(Uri inputImage) {
SettingsList settingsList = createPesdkSettingsList();
// Set input image
settingsList.getSettingsModel(LoadSettings.class).setSource(inputImage);
settingsList.getSettingsModel(PhotoEditorSaveSettings.class).setOutputToGallery(Environment.DIRECTORY_DCIM);
new PhotoEditorBuilder(this).setSettingsList(settingsList).startActivityForResult(this, PESDK_RESULT);
}
I want to use that library with the absolute path of an image. How can I setting it ?
You should convert absolute path to content uri.
For example
Below Android P
public static Uri getImageContentUri(Context context, File imageFile) {
String filePath = imageFile.getAbsolutePath();
Cursor cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Images.Media._ID },
MediaStore.Images.Media.DATA + "=? ",
new String[] { filePath }, null);
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
cursor.close();
return Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + id);
} else {
if (imageFile.exists()) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, filePath);
return context.getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
} else {
return null;
}
}
}
Above Android Q
public static Uri getImageContentUri(Context context, File imageFile) {
String filePath = imageFile.getAbsolutePath();
Cursor cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Images.Media._ID},
MediaStore.Images.Media.DATA + "=? ",
new String[]{filePath}, null);
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
cursor.close();
return Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + id);
} else {
if (imageFile.exists()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentResolver resolver = context.getContentResolver();
Uri picCollection = MediaStore.Images.Media
.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
ContentValues picDetail = new ContentValues();
picDetail.put(MediaStore.Images.Media.DISPLAY_NAME, imageFile.getName());
picDetail.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");
picDetail.put(MediaStore.Images.Media.RELATIVE_PATH,"DCIM/" + UUID.randomUUID().toString());
picDetail.put(MediaStore.Images.Media.IS_PENDING,1);
Uri finaluri = resolver.insert(picCollection, picDetail);
picDetail.clear();
picDetail.put(MediaStore.Images.Media.IS_PENDING, 0);
resolver.update(picCollection, picDetail, null, null);
return finaluri;
}else {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, filePath);
return context.getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
} else {
return null;
}
}
}
Do you have the absolute path of the image?
I suggest code like below, try again...
String filepath = "/storage/emulated/0/image.jpg";
Uri selectedUri = getImageContentUri(context, new File(filepath));
openEditor(selectedUri);
Use second getImageContentUri function in above answer.

How to set different request codes in onActivityResult?

I have an app that chooses a picture either from gallery or from camera and put it on an imageview. The problem is that I can't set two different request codes for the same OnActivityResult.
camera capture works, but gallery doesn't. I get this:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/272 flg=0x1 }} to activity {com.parse.starter/com.parse.starter.reportar}: java.lang.NullPointerException: uriString
at android.app.ActivityThread.deliverResults(ActivityThread.java:3649)
Could someone help me please?? here is my code:
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Image from gallery...
if(requestCode == 1 && resultCode == RESULT_OK && data !=null){
Uri selectedImage = data.getData();
try {
//converts data into bitmap
Bitmap bitmapImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
//sets image on imageview
ImageView imageView = (ImageView) findViewById(R.id.imageView);
imageView.setImageBitmap(bitmapImage);
} catch (IOException e){
e.printStackTrace();
Toast.makeText(getApplication().getBaseContext(),"Error", Toast.LENGTH_LONG).show();
}
}
//Image from camera
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
try {
mImageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath));
ImageView imageView = (ImageView) findViewById(R.id.imageView);
imageView.setImageBitmap(mImageBitmap);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(getApplication().getBaseContext(),"Error", Toast.LENGTH_LONG).show();
}
}
}
Try this
private int LOAD_IMAGE_RESULTS=1;
OnChoose Code
chooseimage.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
if (Build.VERSION.SDK_INT >= 23){
boolean result= Utility.checkPermission(getActivity());
if(result) {
galleryIntent();
}
}
else {
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// Start new activity with the LOAD_IMAGE_RESULTS to handle back the results when image is picked from the Image Gallery.
startActivityForResult(i,LOAD_IMAGE_RESULTS); //LOAD_IMAGE_RESULTS
}
}
});
Also Code added For Permission and Set Image
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (Build.VERSION.SDK_INT >= 23) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == LOAD_IMAGE_RESULTS) {
onSelectFromGalleryResult(data);
}
}
}
else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && isMediaDocument(data.getData())) {
Bitmap bitmap = null;
Uri selectedImage = data.getData();
String wholeID = DocumentsContract.getDocumentId(selectedImage);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
String[] column = {MediaStore.Images.Media.DATA};
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = getActivity().getContentResolver().
query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
column, sel, new String[]{id}, null);
String filePath = "";
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
//filePath = cursor.getString(columnIndex);
mPath = cursor.getString(columnIndex);
}
cursor.close();
}
else {
if (requestCode == LOAD_IMAGE_RESULTS && resultCode == getActivity().RESULT_OK && data != null) {
// Let's read picked image data - its URI
Uri pickedImage = data.getData();
// Let's read picked image path using content resolver
String[] filePath = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(pickedImage, filePath, null, null, null);
cursor.moveToFirst();
mPath = cursor.getString(cursor.getColumnIndex(filePath[0]));
//edAttach.setText(mPath.toString()); path set anywhere
cursor.close();
}
}
}
}
private void onSelectFromGalleryResult(Intent data) {
Bitmap bm=null;
if (data != null) {
try {
bm = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), data.getData());
} catch (IOException e) {
e.printStackTrace();
}
ivprofile.setImageBitmap(bm);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && isMediaDocument(data.getData())) {
Uri selectedImage = data.getData();
String wholeID = DocumentsContract.getDocumentId(selectedImage);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
String[] column = {MediaStore.Images.Media.DATA};
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = getActivity().getContentResolver().
query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
column, sel, new String[]{id}, null);
String filePath = "";
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
//filePath = cursor.getString(columnIndex);
mPath = cursor.getString(columnIndex);
//edAttach.setText(mPath); path set anywhere
}
cursor.close();
}
else {
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
mPath = cursor.getString(columnIndex).toString();
System.out.println("picturePath" + mPath);
if (!mPath.equalsIgnoreCase(null)) {
edAttach.setText(mPath);
}
cursor.close();
}
}
public boolean hasPermissionInManifest(Context context, String permissionName) {
final String packageName = context.getPackageName();
try {
final PackageInfo packageInfo = context.getPackageManager()
.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
final String[] declaredPermisisons = packageInfo.requestedPermissions;
if (declaredPermisisons != null && declaredPermisisons.length > 0) {
for (String p : declaredPermisisons) {
if (p.equals(permissionName)) {
return true;
}
}
}
} catch (PackageManager.NameNotFoundException e) {
}
return false;
}
public static boolean isMediaDocument(Uri uri)
{
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
private void galleryIntent()
{
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);//
startActivityForResult(Intent.createChooser(intent, "Select File"),LOAD_IMAGE_RESULTS);
}
#Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
galleryIntent();
} else {
//code for deny
}
break;
}
}
Or Permission In your mainfiest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

send local image upload to database android

I can change image with local picker (not camera) and set it to imageview (profile_image) like this :
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
//selectedImagePath = getPath(selectedImageUri);
//Utils.log("selectedImagePath: " + selectedImagePath);
Utils.log("selectedImageUri: " + selectedImageUri);
profile_image.setImageURI(selectedImageUri);
final int takeFlags = data.getFlags()
& (Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
String id = selectedImageUri.getLastPathSegment().split(":")[1];
final String[] imageColumns = {MediaStore.Images.Media.DATA };
final String imageOrderBy = null;
Uri uri = getUri();
String selectedImagePath = "path";
Cursor imageCursor = managedQuery(uri, imageColumns,
MediaStore.Images.Media._ID + "="+id, null, imageOrderBy);
if (imageCursor.moveToFirst()) {
selectedImagePath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
new LocalImageUpload().execute(selectedImagePath);
}
Utils.log("selectedImagePath:" + selectedImagePath); // use selectedImagePath
}else{
Uri uri = data.getData();
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
cursor.moveToFirst();
Utils.log("DatabaseUtils:" + DatabaseUtils.dumpCursorToString(cursor));
int columnIndex = cursor.getColumnIndex(projection[0]);
String picturePath = cursor.getString(columnIndex); // returns null
cursor.close();
}
}
}
I got selectedImageUri with Utils.log("selectedImageUri: " + selectedImageUri);, but I got null when log Utils.log("selectedImagePath: " + selectedImagePath);
Update: I change like that and already got selectedImagePath. commented old selectedImagePath.
So I want to upload image to database after profile_image.setImageURI(selectedImageUri); , how to upload local image picker to database? I mean the background proccess POST code?
Can you please try below one ?
Pass Uri as argument in below function and get Path from Uri.
private String getRealPathFromURI (Uri contentUri) {
String path = null;
String[] proj = { MediaStore.MediaColumns.DATA };
Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
if (cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
path = cursor.getString(column_index);
}
cursor.close();
return path;
}
Now set Bitmap on ImageView using below code:
String mRealPath = getRealPathFromURI(your_uri);
Bitmap bmImg = BitmapFactory.decodeFile(mRealPath);
imageView.setImageBitmap(bmImg);
Edit:
Now you have to pass an argument for your Async Task:
new LocalImageUpload().execute(mRealPath);
Hope this will help you.

How to get image from gallery which supports for API>=19 & API<19 both?

Image is not importing, every time when I pic image from gallery in Android.
Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, LOAD_IMAGE_RESULTS);
super.onActivityResult(requestCode, resultCode, data);
BitmapFactory.Options BitmapFactoryOptionsbfo = new BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;
if (requestCode == LOAD_IMAGE_RESULTS && resultCode == RESULT_OK
&& data != null) {
imgUri = data.getData();
// Let's read picked image path using content resolver
String[] filePath = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(imgUri, filePath, null,
null, null);
cursor.moveToFirst();
String imagePath = cursor.getString(cursor
.getColumnIndex(filePath[0]));
bmp = BitmapFactory.decodeFile(imagePath);
cursor.close();
}
image is not importing every time ,some bmp sets nothing on imageview.
how to get image from gallery which supports for API>=19 & API<19 both...
This code'll solve the problem for SDK < API11, SDK >= 11 && SDK < 19 and SDK > 19
Declare it Globally
public final int GALLERY_PHOTO = 2;
Bitmap newbitmap;
private Uri fileUri;
Use this Method to Start Image chooser
public void callGallery() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),
GALLERY_PHOTO);
}
Use this condition in Default #Overide onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == GALLERY_PHOTO) {
if (resultCode == RESULT_OK) {
// SDK < API11
if (Build.VERSION.SDK_INT < 11) {
try {
realPath = RealPathUtil.getRealPathFromURI_BelowAPI11(
Yourclassname.this,
data.getData());
setTextViews(Build.VERSION.SDK_INT, data.getData()
.getPath(), realPath);
} catch (Exception e) {
e.printStackTrace();
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver()
.query(selectedImage, filePathColumn, null,
null, null);
cursor.moveToFirst();
int columnIndex = cursor
.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
newbitmap = BitmapFactory.decodeFile(filePath);
imageview.setImageBitmap(newbitmap);
}
}
// SDK >= 11 && SDK < 19
else if (Build.VERSION.SDK_INT < 19) {
try {
realPath = RealPathUtil.getRealPathFromURI_API11to18(
yourclassname.this,
data.getData());
setTextViews(Build.VERSION.SDK_INT, data.getData()
.getPath(), realPath);
} catch (Exception e1) {
e1.printStackTrace();
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver()
.query(selectedImage, filePathColumn, null,
null, null);
cursor.moveToFirst();
int columnIndex = cursor
.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
newbitmap = BitmapFactory.decodeFile(filePath);
imageview.setImageBitmap(newbitmap);
}
}
else {
try {
realPath = RealPathUtil.getRealPathFromURI_API19(
yourclassname.this,
data.getData());
setTextViews(Build.VERSION.SDK_INT, data.getData()
.getPath(), realPath);
} catch (Exception e) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver()
.query(selectedImage, filePathColumn, null,
null, null);
cursor.moveToFirst();
int columnIndex = cursor
.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
newbitmap = BitmapFactory.decodeFile(filePath);
imageview.setImageBitmap(newbitmap);
}
}
// end
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(getApplicationContext(), "Canceled",
Toast.LENGTH_SHORT).show();
} else {
// failed to capture image
Toast.makeText(getApplicationContext(),
"Oops!! Failed to pick Image", Toast.LENGTH_SHORT).show();
}
}
Include this method in your class
private void setTextViews(int sdk, String uriPath, String realPath) {
Uri uriFromPath = Uri.fromFile(new File(realPath));
fileUri = uriFromPath;
try {
newbitmap = BitmapFactory.decodeStream(getContentResolver()
.openInputStream(fileUri));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
imageview.setImageBitmap(newbitmap);
Log.d("Status", "Build.VERSION.SDK_INT:" + sdk);
Log.d("Status", "URI Path:" + fileUri);
Log.d("Status", "Real Path: " + realPath);
}
Create this Helper Methods in RealPathUtil.class
public class RealPathUtil {
#SuppressLint("NewApi")
public static String getRealPathFromURI_API19(Context context, Uri uri){
String filePath = "";
String wholeID = DocumentsContract.getDocumentId(uri);
// Split at colon, use second item in the array
String id = wholeID.split(":")[1];
String[] column = { MediaStore.Images.Media.DATA };
// where id is equal to
String sel = MediaStore.Images.Media._ID + "=?";
Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
column, sel, new String[]{ id }, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
filePath = cursor.getString(columnIndex);
}
cursor.close();
return filePath;
}
#SuppressLint("NewApi")
public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
String result = null;
CursorLoader cursorLoader = new CursorLoader(
context,
contentUri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
if(cursor != null){
int column_index =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
result = cursor.getString(column_index);
}
return result;
}
public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri){
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index
= cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
Hope this will solve your Problem.

Android intent.getData() Nullpointer exceptipon

I have an android app that start the smartphone camera
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST );
To display the taken picture I use this piece of code,
#Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
setImage=true;
if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
if(data!=null)
{
ImageView image = (ImageView) findViewById(R.id.imagePreview);
Bundle extras = data.getExtras();
Bitmap mImageBitmap = (Bitmap) extras.get("data");
image.setImageBitmap(mImageBitmap);
}
}
}
This works pretty fine but if i want to get the path of the taken picture, i have to use (intent)data.getData() but this returns a null value. what should i do to solve this problem?
Try this hope it helps you.
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
String imageName = picturePath.substring(picturePath.lastIndexOf(
"/", picturePath.length()));
Try out as below:
Bitmap m_photo = (Bitmap) p_data.getExtras().get("data");
if (m_photo != null)
{
ByteArrayOutputStream m_upByteArrayOutputStream = new ByteArrayOutputStream();
m_photo.compress(Bitmap.CompressFormat.PNG, 40, m_upByteArrayOutputStream);
Drawable m_imageFromCamera = new BitmapDrawable(m_photo);
image.setBackgroundDrawable(m_photo);
}
EDITED:
To get the Path of the image try out below code:
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String imagePath = cursor.getString(columnIndex); <---- Here is your image path.
cursor.close();

Categories