2016-03-08 2 views
0

Я нашел этот код и попытался реализовать в своем приложении, он открывает галерею, давайте мне выбрать фотографию, затем приложения перестанут работать и закрываются.Извлечение фотографии из фотогалереи

Это мой первый попыток загрузить изображение в mysql, и я застрял в самом начале.

buttonChoose.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      { 
       showFileChooser(); 
      } 
     }); 

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




@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(); 

     try 
     { 
      bitmap = MediaStore.Images.Media.getBitmap(MainActivity.this.getContentResolver(), filePath); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     imageView.setImageBitmap(bitmap); 
    } 
} 

ответ

1
Uri filePath = data.getData(); 

Это не будет иметь смысла для большинства Uri значений.

Лучшее решение для населён ImageView из Uri является использование a third-party image loading library, таких, как Picasso.

Если вы настаиваете на делать это самостоятельно, вам нужно будет фоновый поток, используйте ContentResolver и openInputStream() получить InputStream на содержание поддержанного Uri, используйте BitmapFactory и decodeStream() получить Bitmap, затем (на основной поток приложения) обновите ImageView с помощью Bitmap.

+0

Должно ли быть сделано так? Uri imageUri = data.getData(); Picasso.with (this) .load (imageUri) .into (imageView); – jack

+0

@jack: Да, это выглядит отлично, если предположить, что 'this' является вашей' Деятельностью'. Это позволит загружать изображение в фоновый поток и помещать его в ваш ImageView. В Picasso есть множество других опций конфигурации (например, управление масштабированием), если они вам понадобятся. – CommonsWare

+0

хорошо, приложение остановилось, но ничего не отображается на изображении ... imageuri = "content: // media/external/images/media/182" ... это правильно? – jack

Смежные вопросы