Search code examples
javaandroidandroid-imageviewandroid-gallery

Select image from gallery and show in imageview


I need Open my gallery in mobile phone and select one picture which opened in imageview on activity.. nothing hard.. but I have code and thise code in simulator (genymotion) run perfect.. but on real phone Xiaomi Mi4 nothing.

Open gallery select item and nothing.

I haven't have more phones :(

I try download some examples with this theme and every it's the same.. galery open when I select item app doing nothing.

Have you some project with select image from gallery and show in imageview? if yes please share your code and upload me somewhere .apk for try, because I .. :( :'(

my gradle

   apply plugin: 'com.android.application'
android {
    compileSdkVersion 25
    buildToolsVersion "24.0.2"
    defaultConfig {
        applicationId "paradox.galopshop"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }


    }


}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'

        compile 'com.android.support:appcompat-v7:23.2.1'
        compile 'com.android.support:design:23.2.1'

        compile 'com.squareup.picasso:picasso:2.5.2'
    })

    //Add library


    // loaderimage
    compile  'com.android.support:appcompat-v7:25.2.0'
    compile  'com.android.support:design:25.2.0'
    compile  'com.google.firebase:firebase-database:10.2.0'
    compile  'com.android.support.test.espresso:espresso-core:2.2.2'
    compile 'com.google.firebase:firebase-storage:10.2.0'
    compile 'com.google.firebase:firebase-auth:10.2.0'
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
    compile 'com.google.firebase:firebase-crash:10.2.0'
    testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'

Thanks.

Intent i = new Intent();
            i.setType("image/*");
            i.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(i, "Select Picture"),SELECT_PICTURE );

protected  void onActivityResult(int requestCode, int resultCode, Intent data){
    if(resultCode==RESULT_OK){
        if(requestCode==SELECT_PICTURE){
            Uri selectedImageUri = data.getData();
            if (null != selectedImageUri) {
                // Get the path from the Uri
                String path = getPathFromURI(selectedImageUri);

                Log.i("IMAGE PATH TAG", "Image Path : " + path);
                // Set the image in ImageView
                ImageView imageView=(ImageView)findViewById(R.id.imageView2);
                imageView.setImageURI(selectedImageUri);

                TextView tw=(TextView)findViewById(R.id.addimage);
                tw.setText("Načítané");



            }
        }
    }
}

private String getPathFromURI(Uri contentUri) {
    String res = null;
    String[] proj = {MediaStore.Images.Media.DATA};
    Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
    if (cursor!=null) {
        if (cursor.moveToFirst()) {
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            res = cursor.getString(column_index);
        }
        cursor.close();
    } else {
        Toast.makeText(this, "Cursor null" + proj, Toast.LENGTH_SHORT).show();
    }
    return res;
}

//////update

protected  void onImageViewClick(){
  //  ImageView imageView=(ImageView)findViewById(R.id.imageView2);
    TextView tw=(TextView)findViewById(R.id.addimage);
    tw.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ImagePicker imgpicker= new ImagePicker();
            imgpicker.getPickImageIntent(getApplicationContext());           
        }
    });

}


            @Override
protected  void onActivityResult(int requestCode, int resultCode, Intent data){

                Bitmap bitmap = ImagePicker.getBitmapFromResult(this, resultCode, data);
                if (null != bitmap && resultCode == RESULT_OK) {

                    ImageView imageView=(ImageView)findViewById(R.id.imageView2);
                    imageView.setImageBitmap(bitmap);

                    TextView tw=(TextView)findViewById(R.id.addimage);
                    tw.setText("Načítané");
                }

///////////////////////edit 2

I find error with firebase crashed..

Yhen I confirm photo app crashed..

arrow_drop_down
Exception java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=4, result=-1, data=Intent { act=inline-data (has extras) }} to activity {paradox.galopshop/paradox.galopshop.All}: java.lang.NullPointerException: uri
android.app.ActivityThread.deliverResults (ActivityThread.java)
android.app.ActivityThread.handleSendResult (ActivityThread.java)
android.app.ActivityThread.access$1400 (ActivityThread.java)
android.app.ActivityThread$H.handleMessage (ActivityThread.java)
android.os.Handler.dispatchMessage (Handler.java)
android.os.Looper.loop (Looper.java)
android.app.ActivityThread.main (ActivityThread.java)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java)
arrow_drop_down
Caused by java.lang.NullPointerException: uri
com.android.internal.util.Preconditions.checkNotNull (Preconditions.java)
android.content.ContentResolver.openAssetFileDescriptor (ContentResolver.java)
android.content.ContentResolver.openAssetFileDescriptor (ContentResolver.java)
paradox.galopshop.ImagePicker.decodeBitmap (ImagePicker.java:116)
paradox.galopshop.ImagePicker.getImageResized (ImagePicker.java:139)
paradox.galopshop.ImagePicker.getBitmapFromResult (ImagePicker.java:103)
paradox.galopshop.All.onActivityResult (All.java:363)
android.app.Activity.dispatchActivityResult (Activity.java)
android.app.ActivityThread.deliverResults (ActivityThread.java)
android.app.ActivityThread.handleSendResult (ActivityThread.java)
android.app.ActivityThread.access$1400 (ActivityThread.java)
android.app.ActivityThread$H.handleMessage (ActivityThread.java)
android.os.Handler.dispatchMessage (Handler.java)
android.os.Looper.loop (Looper.java)
android.app.ActivityThread.main (ActivityThread.java)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java)

Solution

  • ImagePicker : please credit the developer when using their library

    In your if statement inside of onActivityResult change requestCode to requestCode & 0xffff.

    What many people don't notice here is that the requestCode that is coming back is coming back as a hex number not as a digit number.

    In your AndroidManifest.xml add these permissions:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    

    Use this method to pick up images:

    protected  void onImageViewClick(){
      //  ImageView imageView=(ImageView)findViewById(R.id.imageView2);
        TextView tw=(TextView)findViewById(R.id.addimage);
        tw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                selectImage();
            }
        });
    
    }
    
    
    private void selectImage() {
        Intent takeImageIntent = ImagePicker.getPickImageIntent(this);
        if (takeImageIntent.resolveActivity(getActivity().getPackageManager()) != null) {
            startActivityForResult(takeImageIntent, REQUEST_IMAGE_CAPTURE);
        }
    }
    

    Then use this to receive them:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Bitmap bitmap = ImagePicker.getBitmapFromResult(this, resultCode, data);
        if (null != bitmap && resultCode == RESULT_OK) {
        //do what you want with the bitmap here
    
       }
    }