Я знаю, что есть несколько других вопросов по этой теме, но ни одно из решений не работало для меня. Я добавил разрешения в свой манифест. Я могу открыть галерею, выбрать фотографию и вернуться к приложению, но изображение не изменится. Приложение выполняет некоторую обработку, и я не получаю никаких ошибок. Я попытался также попытаться масштабировать изображение, прежде чем вставлять его в мое изображение без везения.Изображение, загруженное из галереи, не отображается в ImageView
Вот мой код:
public class UserDetailsFragment extends Fragment {
private Context context;
private ImageView imageView;
private Bitmap uploadedImage;
public static final int RESULT_IMAGE = 0;
public UserDetailsFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_user_details, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
imageView = (ImageView) getView().findViewById(R.id.profile_picture);
imageView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_IMAGE);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = context.getContentResolver().query(
selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
try {
InputStream in = new URL(filePath).openStream();
uploadedImage = BitmapFactory.decodeStream(in);
imageView.setImageBitmap(uploadedImage);
}catch (Exception ex){
}
}
}
}
Вот мой ImageView:
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="-160dp"
android:layout_gravity="center"
android:layout_below="@+id/imageView"
android:src="@drawable/user_details_icon"
android:id="@+id/profile_picture" />
EDIT
Я пытался использовать Пикассо, но вместо этого до сих пор не повезло :
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
Picasso.with(context)
.load(MediaStore.Images.Media.DATA)
.resize(10, 10)
.centerCrop()
.into(imageView);
}
Во-первых, ** никогда не поймайте 'Exception' без регистрации его **, так как вы' onActivityResult() '. Во-вторых, ваш код 'onActivityResult()' неправильный, так как у вас могут не быть прав на работу с файловым путем (например, он указывает на съемное хранилище), и вы делаете дисковый ввод-вывод в основном потоке приложения. Используйте [библиотеку загрузки изображений] (https://android-arsenal.com/tag/46), например [Picasso] (https://github.com/square/picasso), передав ей 'Uri' для обоих используйте 'Uri' правильно и для асинхронного заполнения вашего ImageView. – CommonsWare
Спасибо за подсказку. Я довольно новичок в Android, поэтому я действительно не знал о Пикассо. Я не уверен, что понимаю, что вы имеете в виду в onActivityResult(), но я попытался изменить его на внутреннее хранилище, но все равно не повезло. Я также изменил весь свой onActivityResult (см. Править), но до сих пор не повезло – Andypandy