Socket - ListView中的异步图像加载

时间:2017-05-22 12:03:21

标签: android image sockets listview asynchronous

帮助解决我的问题。我使用代码从此站点http://www.technotalkative.com/android-asynchronous-image-loading-in-listview/下载异步图像。使用HTTP它可以正常工作,但是如果我用

更改它
URL imageUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setInstanceFollowRedirects(true);
InputStream is=conn.getInputStream();

在这一个

Socket socket1 = new Socket();
socket1.connect(new InetSocketAddress(mSettings.getString(APP_PREFERENCES_IPSERVER, ""), 30100), 5000);
ObjectOutputStream outp1 = new ObjectOutputStream(socket1.getOutputStream());
ObjectInputStream inp1 = new ObjectInputStream(socket1.getInputStream());
outp1.writeObject("ASprUserEdir,-,fileget,-," + url);
outp1.flush();
String messageReceived = (String) inp1.readObject();
int file_size = Integer.valueOf(messageReceived.split(",-,")[1]);
InputStream is=socket1.getInputStream();

然后,如果连接速度很慢,如果滚动工作表,则图片不会显示在其位置。怎么解决这个问题?也许需要一个不同的代码。 谢谢!

2 个答案:

答案 0 :(得分:0)

当您尝试下载图片时,您需要考虑一些问题。示例缓存,由于图像大小而导致内存不足等。

最简单的方法是使用Picassoglide等库。他们下载图像异步,缓存图像,内存缓存以防止内存不足等。它易于学习和使用。

答案 1 :(得分:0)

使用Library Picasso或Glide 然后使用以下代码

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

有关Picasso

的更多详情,请浏览以下链接