简体   繁体   中英

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)

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

   }
}

Did you try this?

public void onActivityResult( ....) {
      If ( resultCode == RESULT_OK) {
             Uri selectedImg = data.getData();
             Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver, selectedImg);
             If(bitmap != null) {
                yourImageView.setImageBitmap(bitmap);
             }
       }
}

put this code inside (anything which you use to go to gallery)

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

Then call this function

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

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
        Uri filePath = data.getData();

           Bitmap img=MediaStore.Images.Media.getBitmap(getContentResolver, filePath);


     If(img!= null) {
            image.setImageBitmap(img);
    }
}

don't forget this permission to be called

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM