Choose picture Intent causes nullpointer exception

后端 未结 3 620
一生所求
一生所求 2020-12-19 16:48
 public void uploadpicture(View view)
        {
            Intent intent = new Intent();
            intent.setType(\"image/*\");
            intent.setAction(Inten         


        
相关标签:
3条回答
  • 2020-12-19 17:25

    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
                }
        }
    }
    
    }
    
    0 讨论(0)
  • 2020-12-19 17:28

    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).

    0 讨论(0)
  • 2020-12-19 17:28

    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!

    0 讨论(0)
提交回复
热议问题