我已經遍尋全面瞭解我的問題的解決方案,但似乎無法弄清楚。我敢肯定它可能只有1或2條簡單的線條,希望有人能引導我走向正確的方向。將字符串轉換爲uri以位圖顯示在ImageView中
在我的應用程序中,用戶可以單擊一個按鈕打開畫廊。一旦他們選擇了一個圖像,它會在我的應用程序中的ImageView中顯示該圖像。這部分工作得很好。本來,我只是從畫廊返回一個URI,我會直接顯示與此:
imageView1.setImageURI(myUri);
嗯,很明顯我現在遇到了可怕的「內存不足」的錯誤,如果用戶重新加載該頁面連續幾次,所以我不得不清理我的代碼來縮小圖像。我通過實現一個位圖類來完成這項工作,該類將圖像轉換爲位圖併爲我縮放。現在,我的ImageView顯示代碼如下所示:
imageView1.setImageBitmap(bitmap1);
這部分工作正常。這是問題:
我將uri路徑轉換爲字符串,然後將其保存在SharedPreference中。這是爲了當用戶退出應用程序並稍後返回時,它們自動設置的圖像會自動顯示。我轉換的URI是這樣的:
...
selectedImageUri = data.getData();
String selectedImagePath;
selectedImagePath = getPath(selectedImageUri);
...
舊的方法來檢索SharedPreference字符串,將其轉換爲URI,然後顯示它是工作的罰款。 (除外出,當然內存不足錯誤)它是這樣的:
Uri myUri = Uri.parse(selectedImagePath);
imageView1 = setImageURI(myUri);
「selectedImagePath」顯然,我從SharedPreference檢索到的字符串。再次,這工作得很好,但如果重新加載太多次會拋出錯誤。
現在不工作的部分是當我嘗試實現新的位圖轉換,以便我可以縮放位圖而不會出現內存錯誤。這裏是代碼爲:
Uri myUri = Uri.parse(selectedImagePath)
Bitmap bitmap = getThumbnail(myUri);
imageView1.setImageBitmap(bitmap);
這什麼都不顯示。原始圖像選擇顯示圖像正常,但是當我返回到此屏幕並嘗試從SharedPreference解析字符串,然後將其轉換爲位圖時,無法顯示任何內容。對於「getThumbnail」方法的代碼是直接從這篇文章採取--->
How to get Bitmap from an Uri?
這是第3個答案了。
任何人有任何想法?對不起,超長的帖子,但我寧願解釋我的問題,而不是提供足夠的信息。對不起,如果這是在別的地方回答。我一直在尋找其他問題幾個小時,並沒有找到任何解決我的問題。
謝謝。
我測試你的代碼,但我得到查詢結果爲空。這是爲什麼? fyi,內容不爲空。 –
這個腳本的第一部分幫了很大忙。類似的答案,但沒有解釋清楚!謝謝。 – albertpeiro