Android layout 从网站链接url检索图像时出现内存不足异常
您好,我正在创建一个android应用程序,我的网站上有1500多张照片,我想使用阵列适配器在ListView上显示 我找到的一个解决方案是从我的URL链接下载图像。 这是stacktrace 我的问题是出现了内存不足异常 :E/AndroidRuntime1123:致命异常:线程-79 :E/AndroidRuntime1123:进程: android.quotes,PID:1123 **:E/AndroidRuntime1123:java.lang.OutOfMemoryError:E/AndroidRuntime1123: 在**android.graphics.BitmapFactory.NativeDecodesTeamNative方法中 :E/AndroidRuntime1123:at android.graphics.BitmapFactory.decodeStreamInternalBitmapFactory.java:613 :E/AndroidRuntime1123:at android.graphics.BitmapFactory.decodeStreamBitmapFactory.java:589 :E/AndroidRuntime1123:at android.graphics.BitmapFactory.decodeResourceStreamBitmapFactory.java:422 :E/AndroidRuntime1123:at android.graphics.drawable.drawable.createFromResourceStreamDrawable.java:840 :E/AndroidRuntime1123:at android.graphics.drawable.drawable.createFromStreamDrawable.java:791 :E/AndroidRuntime1123:at com.c.fragments.AuthorImageFragment.loadImageFromWebOperationsAuthorImageFragment.java:77 :E/AndroidRuntime1123:at com.c.fragments.AuthorImageFragment.access$0AuthorImageFragment.java:72 :E/AndroidRuntime1123:at com.c.fragments.AuthorImageFragment$1.runAuthorImageFragment.java:109 下面是来自适配器的代码: 任何帮助都将不胜感激。。 致以最良好的祝愿:Android layout 从网站链接url检索图像时出现内存不足异常,android-layout,exception,memory-leaks,imageview,android-drawable,Android Layout,Exception,Memory Leaks,Imageview,Android Drawable,您好,我正在创建一个android应用程序,我的网站上有1500多张照片,我想使用阵列适配器在ListView上显示 我找到的一个解决方案是从我的URL链接下载图像。 这是stacktrace 我的问题是出现了内存不足异常 :E/AndroidRuntime1123:致命异常:线程-79 :E/AndroidRuntime1123:进程: android.quotes,PID:1123 **:E/AndroidRuntime1123:java.lang.OutOfMemoryError:E/An
现在,为了提供更多帮助,我将添加用于检索图像的代码 你不可能在内存中保存那么多图像。我建议您将图像下载到本地文件存储,然后在适配器中,当您想要实际绘制包含图像的项目时,您应该启动一个加载程序,该加载程序将按需从磁盘加载图像。很抱歉,内存不足,无法同时存储这么多图像 更高级的策略是使用weakreference将缓存插入到加载过程中。您可以从磁盘加载映像,并将其插入类似HashMap>的内容中,首先查看您想要的映像是否在其中,如果不在其中,则按照通常的方式从磁盘加载 如果您想在架构上真正了解上面列出的WeakReference缓存,请尝试从磁盘加载,但如果文件不在磁盘上,则仅从网络加载。然后,它变成了两层缓存,然后是磁盘,最后才进入网络
private ImageView imageDetail(View v, int resId, Drawable drawable) {
ImageView value = (ImageView) v.findViewById(resId);
BitmapDrawable draw = (BitmapDrawable)drawable;
// value.setAdjustViewBounds(true);
Bitmap bmp=draw.getBitmap();
// value.setLayoutParams(new android.widget.TableRow.LayoutParams((width/4), (height/4)));
value.setImageBitmap(bmp);
return value;
}
Thread networkThread = new Thread() {
@Override
public void run() {
Author author;
// This is just a test i want to do :)))
for (int i=0;i<=1000;i++){
author=new Author();
try {
author.setAuthorImage(loadImageFromWebOperations("http://mySite/Directory/images/"+5+".jpg",i));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
list.add(author);
}
getActivity().runOnUiThread (new Runnable(){
public void run() {
adapter= new AuthorImageAdapter(getActivity().getApplicationContext(),list);
}
});
}
}; networkThread.start();
private Drawable loadImageFromWebOperations(String url,int id) throws MalformedURLException, IOException
{ InputStream is=null;
try{
is = (InputStream) new java.net.URL(url).getContent();
LOGGER.info("Drawable -----");
Drawable d = Drawable.createFromStream(is, id+".jpg");
return d;
}catch (Exception e) {
// log Exception
LOGGER.info("Exception "+e.toString());
return null;
}
finally {
if (is!=null){
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
LOGGER.info("Exception "+e.toString());
// log Exception
return null;
}
}
}
}