我相對較新的android開發,我想創建一個自定義ListView與ImageView和TextView。我將URL轉換爲位圖圖像,然後嘗試在imageView中顯示圖像。但是,我收到一個錯誤,我的應用程序立即崩潰。能夠在我的imageView中顯示drawable,我做了一些修改,並試圖顯示一個位圖,然後我的應用程序崩潰。任何幫助將不勝感激。這裏是我的3類:CustomListView與位圖 - OutOfMemory錯誤
編輯我用一個asynctask獲得位圖圖像在一個單獨的線程,現在我的應用程序不會崩潰了。但是當我開始活動時它不顯示列表視圖。這是我更新的代碼。
編輯我改變了我的代碼,我只是在我的異步任務的執行方法中傳遞一個imageView。我現在能夠看到我的列表視圖中的文字,但我沒有看到圖像。這是我編輯的代碼。
編輯我用調試器找出爲什麼位圖沒有顯示,我發現我的位圖變量爲空。這是因爲我沒有添加Internet權限。添加權限後我的應用程序開始在給定的行崩潰:
b = BitmapFactory.decodeStream(image_url.openConnection() .getInputStream());
我已經得到一個RuntimeException由於OutOfMemory錯誤。我不知道如何解決這個問題。我將不勝感激任何幫助。謝謝 !
這裏是我的LoadImage的AsyncTask類:
public class LoadImage extends AsyncTask<String, Integer, Bitmap>{
Context callingContext = null;
Bitmap b = null;
ImageView view;
public LoadImage(ImageView view){
this.view = view;
}
@Override
protected Bitmap doInBackground(String... arg0) {
// TODO Auto-generated method stub
String p_url = "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png";
Bitmap b = null;
try {
URL image_url = new URL(p_url);
b = BitmapFactory.decodeStream(image_url.openConnection() .getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return b;
}
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
view.setImageBitmap(result);
}
}
你可以請你發佈錯誤和回溯(如果適用)。你可以在logcat中找到回溯。 – MJD 2012-07-23 16:15:56
您下載的圖像有多大?在Android上,你有一個(非常)有限的內存預算。根據設備,數量會發生變化,但最小值爲16M(http://stackoverflow.com/questions/1702323/android-available-ram)。如果圖像真的很大,你可以試着看看:http://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap -object/823966#823966。 – MJD 2012-07-24 13:59:02