【发布时间】:2012-07-23 16:11:36
【问题描述】:
我对 android 开发比较陌生,我正在尝试使用 ImageView 和 TextView 创建自定义 ListView。我正在将 URL 转换为位图图像,然后尝试在 imageView 中显示图像。但是我收到一个错误,我的应用程序立即崩溃。能够在我的 imageView 中显示可绘制对象,我进行了一些修改并尝试显示位图,然后我的应用程序崩溃了。任何帮助将不胜感激。这是我的 3 节课:
编辑 我使用异步任务在单独的线程上获取位图图像,现在我的应用程序不再崩溃。但是当我开始活动时它不显示列表视图。这是我更新的代码。
编辑我再次更改了我的代码,我只在我的异步任务的执行方法中传递了一个 imageView。我现在可以在列表视图中看到文本,但看不到图像。这是我编辑的代码。
编辑 我使用调试器找出位图未显示的原因,我发现我的位图变量为空。这是因为我没有添加互联网权限。添加权限后,我的应用程序开始在给定行崩溃:
b = BitmapFactory.decodeStream(image_url.openConnection() .getInputStream());
由于 OutofMemory 错误,我收到了 RuntimeException。我不知道如何解决这个问题。我将不胜感激任何帮助。谢谢!
这是我的 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 中找到回溯。
-
您下载的图片有多大?在 Android 上,您的内存预算(非常)有限。根据设备,数量会有所不同,但最小值为 16M (stackoverflow.com/questions/1702323/android-available-ram)。如果图片真的很大,可以试试看:stackoverflow.com/questions/477572/…。
标签: android bitmap android-listview android-arrayadapter out-of-memory