简体   繁体   中英

loading image into an imageView

i am a new android developer my first task with Intent is to pick an image from gallery and display it into an imageview so what i did is the following :

xml:

 <Button
    android:id="@+id/Intent_btn"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_alignBaseline="@+id/button1"
    android:layout_alignBottom="@+id/button1"
    android:layout_marginLeft="16dp"
    android:layout_toRightOf="@+id/button1"
    android:text="Intent button"
    android:onClick="openGallery" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_alignRight="@+id/Intent_btn"
    android:layout_centerVertical="true" />

code:

ImageView imageview1;
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     imageview1=(ImageView)findViewById(R.id.imageView1);
}

  public void openGallery(View v)
{
  Intent intent = new  Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
 startActivityForResult(intent, RESULT_LOAD_IMAGE); 
}

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

if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
        && null != data) {
    Uri selectedImage = data.getData();
    String[] filePathColumn = {MediaStore.Images.Media.DATA};

    Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String filePath = cursor.getString(columnIndex);
    cursor.close();
    Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
    imageview1.setImageBitmap(yourSelectedImage); 
}
}

i managed to open the gallery and pick an image but it never load what would it be the problem ?

向清单文件添加权限:

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

Here's some sample code on how to do that:

protected void onActivityResult(int requestCode, int resultCode, 
       Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case REQ_CODE_PICK_IMAGE:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            String[] filePathColumn = {MediaStore.Images.Media.DATA};

            Cursor cursor = getContentResolver().query(
                               selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String filePath = cursor.getString(columnIndex);
            cursor.close();


            Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
        }
    }
}

Add this permission :-

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

Use this. This will work. Put this code in onActivityResult()

Uri selectedImage = data.getData();
    String galleryImatePath = getRealPathFromURI(selectedImage);
    InputStream stream = getContentResolver().openInputStream(selectedImage);
    final Bitmap myImage = BitmapFactory.decodeStream(stream, null , bfOptions);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    myImage.compress(Bitmap.CompressFormat.JPEG, 100, bos);
    imageview1.setImageBitmap(myImage);


public String getRealPathFromURI(Uri contentUri) {
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
public void pickImage() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, REQUEST_CODE);
}



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
        try {
            if (bitmap != null) {
                bitmap.recycle();
            }
            InputStream stream = getContentResolver().openInputStream(
                    data.getData());
            bitmap = BitmapFactory.decodeStream(stream);
            stream.close();
            image.setImageBitmap(bitmap);
            saveToInternalSorage(bitmap);
            // save image to internal memory
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

Try as like this.

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