Select image from galery and show in imageview

2019-01-20 20:02发布

问题:

Sorry for writening but i have a BIG problem..

I 6 hours looking for result it but .. no :(

I need Open my galery 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 galery 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..

Please have you ever similar problem?

Have you some project with select image from galery 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)

回答1:

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

   }
}


回答2:

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);
             }
       }
}


回答3:

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" />