Konwersja ciągu na uri na bitmapę, aby wyświetlić w ImageView

Szukałem rozwiązania mojego problemu i po prostu nie mogłem tego zrozumieć. Jestem pewien, że jest to prawdopodobnie 1 lub 2 proste linie i mam nadzieję, że ktoś może skierować mnie we właściwym kierunku.

W mojej aplikacji użytkownik może kliknąć przycisk, który otworzy galerię. Po wybraniu obrazu wyświetli ten obraz w ImageView w mojej aplikacji. Ta część działa doskonale. Początkowo właśnie zwróciłem uri z galerii i bezpośrednio to pokazałem:

imageView1.setImageURI(myUri);

Cóż, najwyraźniej napotykam teraz na przerażający błąd „Out Of Memory”, jeśli użytkownik ładuje tę stronę kilka razy z rzędu, więc muszę oczyścić mój kod, aby zmniejszyć obraz. Zrobiłem to, implementując klasę bitmap, która przekształca obraz w bitmapę i skaluje go dla mnie. Teraz mój kod wyświetlania ImageView wygląda tak:

imageView1.setImageBitmap(bitmap1);

Ta część działa dobrze. TUTAJ JEST PROBLEM:

Przekształcam ścieżkę uri na łańcuch, a następnie zapisuję to w SharedPreference. Dzieje się tak, ponieważ gdy użytkownik wychodzi z aplikacji i powraca później, obraz, który ustawi, zostanie automatycznie wyświetlony. Przekształcam uri w ten sposób:

...
selectedImageUri = data.getData();
String selectedImagePath;
selectedImagePath = getPath(selectedImageUri);
...

Stara metoda pobierania ciągu SharedPreference, przekonwertowania go na uri, a następnie wyświetlenia go działa poprawnie. (z wyjątkiem oczywiście błędu braku pamięci) Wyglądało to tak:

Uri myUri = Uri.parse(selectedImagePath);
imageView1 = setImageURI(myUri);

„selectedImagePath” jest oczywiście łańcuchem, który pobrałem z SharedPreference. Ponownie działało to dobrze, ale spowodowałoby błąd w przypadku ponownego załadowania zbyt wiele razy.

Część, która NIE DZIAŁA teraz, to próba zaimplementowania nowej konwersji bitmapy, aby skalować bitmapę i nie uzyskać błędu pamięci. Oto kod tego:

Uri myUri = Uri.parse(selectedImagePath)
Bitmap bitmap = getThumbnail(myUri);
imageView1.setImageBitmap(bitmap);

To nic nie wyświetla. Wybór oryginalnego obrazu wyświetla obraz w porządku, ale kiedy wracam do tego ekranu i próbuje przeanalizować łańcuch z SharedPreference, a następnie przekonwertować go na bitmapę, nic nigdy nie jest wyświetlane. Kod metody „getThumbnail” został pobrany bezpośrednio z THIS POST --->

Jak uzyskać bitmapę z Uri?

To trzecia odpowiedź w dół.

Czy ktoś ma jakieś pomysły? Przepraszam za super długi post, ale wolałbym wyjaśnić mój problem, niż nie dać wystarczająco dużo informacji. Przepraszam, jeśli gdzieś na to odpowiedziano. Przez wiele godzin polowałem na inne pytania i nie znalazłem niczego, co rozwiązałoby mój problem.

Dzięki.

questionAnswers(1)

yourAnswerToTheQuestion