我有一个Android应用程序,将来自一个PHP远程服务器检索数据(图像+文本)和在GridView显示它们。 我使用的装载机在做后台操作。 我对图像和自检索图像将需要更长的独立连接的文本,我想立即显示文本。 该文本使用JSON在服务器上从MySQL被检索后进行编码。 在应用程序,我解析的JSON对象和显示文本,因为我需要。
问题是与图像。 我不知道如果用JSON编码的图像将是一个不错的主意。 另外,图像保存在数据库中的BLOB,为了使用JSON编码他们,我需要使用BASE64_ENCODE()之前它是没有效率的。 我已经看到了这个帖子很多,但是当你必须得到一个像它总是一个简单的例子。 在我来说,我会检索多达30个小尺寸的图像。
我的问题是,我可以用我刚才提出的继续,但似乎应该有更好的方式来做到这一点。 你怎么看待这件事? 我是不是走错路了?
此外,我在想,如果我能在GridView单独显示每个图像一旦准备就绪(而不是等待所有图像做好准备)就像在“谷歌Play应用”的GridView控件。 我可以采取什么方法来实现这一目标?
在此先感谢乡亲!
在我眼中最好的办法是通过HTTP GET请求来下载图像文件作为正常的图像文件。 请确保它被拧当然,有一个线程池,你可以请求排队进入,并有2-3个线程经历和下载。
在保存它们而言,我个人从保存在一个数据库中,以团块搬走,并选择将它们保存到你的应用程序的私有目录持久性存储设备。 保存他们的文件名作为其在已创建的数据库ID的图像文件将加载它们放回快得多。
您也可以按住到ImageView的参考,并将它最初显示一个占位符,一个成功的HTTP请求与你刚才下载的一个替代的ImageView的位图从存储/读入。
你也可以做你做的HTTP请求中的一些图像的缓存。
ImageView myImageView = findViewById(R.id.testImage);
URL url = new URL("http://www.website.com/image.jpg");
URLConnection connection = url.openConnection();
connection.setUseCaches(true);
Object response = connection.getContent();
if (response instanceof Bitmap) {
Bitmap bitmap = (Bitmap)response;
myImageView.setBitmap(bitmap);
}
这也可能是有帮助查找的LRUCache,它执行了大量的缓存功能为您的使用。
看看在Android开发者网站这个环节深入指导图像缓存的好
编辑:您可以使用建议的罗伯特·朗特里的回答更有效地加载位图以减少你的内存使用为好。 链接提供了使用较少的内存,东西,如果你是从创建通过Web下载并保存关闭到本地存储较大的图像的缩略图,将工作以及位图的细节加载。
IMO - 有2个问题,通过网络将图像移动到客户端,让他们装。
假设使用的是HTTP作为协议,则应该有HTTP多线程溶液如在阿帕奇HttpClient的封装。 这将让图片到手机快。
然后,你必须让他们到内存和缓存来呈现照片。 在这里,你可以考虑一下“gallery3D”应用程序不会与它的网格和位图,但其相当复杂的读通代码。
退房- http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
检查代码样本从位图加载大拇指。