4
 public void uploadpicture(View view) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE); } public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == SELECT_PICTURE) { Uri selectedImageUri = data.getData(); selectedImagePath = getPath(selectedImageUri); Toast.makeText(this,selectedImagePath,Toast.LENGTH_SHORT).show(); Log.i("selectedImagePath",selectedImagePath.trim()); } } } 

I got the this from Log-cat:

05-24 15:57:51.054: E/AndroidRuntime(18016): FATAL EXCEPTION: main 05-24 15:57:51.054: E/AndroidRuntime(18016): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.sec.gallery3d.provider/picasa/item/5147009501910019474 }} to activity {ncpl.talentapp/ncpl.talentapp.SignUp}: java.lang.NullPointerException 05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread.deliverResults(ActivityThread.java:2821) 05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2864) 05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread.access$1000(ActivityThread.java:122) 05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1057) 05-24 15:57:51.054: E/AndroidRuntime(18016): at android.os.Handler.dispatchMessage(Handler.java:99) 05-24 15:57:51.054: E/AndroidRuntime(18016): at android.os.Looper.loop(Looper.java:132) 05-24 15:57:51.054: E/AndroidRuntime(18016): at android.app.ActivityThread.main(ActivityThread.java:4126) 05-24 15:57:51.054: E/AndroidRuntime(18016): at java.lang.reflect.Method.invokeNative(Native Method) 05-24 15:57:51.054: E/AndroidRuntime(18016): at java.lang.reflect.Method.invoke(Method.java:491) 05-24 15:57:51.054: E/AndroidRuntime(18016): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 05-24 15:57:51.054: E/AndroidRuntime(18016): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 05-24 15:57:51.054: E/AndroidRuntime(18016): at dalvik.system.NativeStart.main(Native Method) 05-24 15:57:51.054: E/AndroidRuntime(18016): Caused by: java.lang.NullPointerException 
0

4 Answers 4

8

From your log it looks like you are trying to pick an image from Picasa folder dat=content://com.android.sec.gallery3d.provider/picasa/item/5147009501910019474, and these must be handled differently, because data in MediaStore.Images.Media.DATA column will be null for them. You can see how to handle picking images from Picasa correctly at this link:

http://dimitar.me/how-to-get-picasa-images-using-the-image-picker-on-android-devices-running-any-os-version/

Only you also need to handle URIs that start with "content://com.sec.android.gallery3d" (I see this on Samsung S3) so change

if (selectedImage.toString().startsWith("content://com.google.android.gallery3d")) 

to

if (_selectedImage.toString().startsWith("content://com.google.android.gallery3d") || selectedImage.toString().startsWith("content://com.sec.android.gallery3d")) 

I'm not sure if there are any more special cases (probably yes).

Sign up to request clarification or add additional context in comments.

Comments

5

I ran into this same problem and tried implementing this based on the website user1682516 recommended. I was banging my head against the wall because my Picasa content URLs didn't quite match: mine looked like "com.sec.android.gallery3d.provider" and not "com.android.gallery3d.provider" but didn't seem to work whether I altered the URL or not.

Then I felt dumb when I eventually realized that the library I use to load remote images for ImageViews in my app, https://github.com/nostra13/Android-Universal-Image-Loader, takes care of this for me. I can just call ImageLoader.getInstance().loadImage() with the appropriate parameters and get a Bitmap in the callback. I don't need to worry about whether it is a local image, a remote Picasa image, or an ordinary remote image--that's taken care of for me. Wish I had figured that out hours ago!

Comments

0

Tested on Samsung SM-A520F. Works if you want to pick only local images from your gallery:

fun uploadpicture(view: View?) { val intent = Intent() intent.type = "image/*" intent.action = Intent.ACTION_GET_CONTENT intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true) // Restrict choice startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE) } 

Comments

-1

Tested Code here

public class SelectPhotoActivity extends Activity { private static final int SELECT_PICTURE = 1; private String selectedImagePath=""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivityForResult(intent, SELECT_PICTURE); } public String getPath(Uri uri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == SELECT_PICTURE) { Uri selectedImageUri = data.getData(); selectedImagePath = getPath(selectedImageUri); // here you can set the image } } } } 

3 Comments

it works fine for some pictures in samsung ...Some pictures got null pointer exception
Length of those pictures may be large
"Use this whole other piece of code", while arguably helping with the immediate problem (and arguably not even doing that, since you can't just paste this code into the existing class), does nothing to help anyone know what's wrong with the original code.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.