图片来自不同的网址,我希望在ListView
中显示所有图片。每个URL
代表一个图像,如何使用图像URL显示所有图像,其中每个图像都有唯一的ID?
" http://www.samplesite.com/Customer/File/DownloadResource/"图像标识"令牌=&#34 + m_token;
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: java.io.FileNotFoundException: http://samplesite.com/Customer/File/DownloadResource/220?token=aGkvWUlQSW9EeVZmU3pQOFF6WWo5OU4raGdzVjBrSngzWEQvbkNueWxYdz06dGVzdDFAYXBpLmNvbTo2MzYwNjg0OTU0MDgyMDAwMDA6Qw==
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: at com.app.tysomcustomer.dashboard.LoyaltyFragment$ConvertImageUrlTask.doInBackground(LoyaltyFragment.java:320)
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: at com.app.tysomcustomer.dashboard.LoyaltyFragment$ConvertImageUrlTask.doInBackground(LoyaltyFragment.java:277)
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:295)
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
08-15 17:19:01.301 25505-25959/com.app.projectactivity W/System.err: at java.lang.Thread.run(Thread.java:818)
答案 0 :(得分:1)
使用HttpURLConnection
从URL获取输入流。然后使用BitmapFactory
将此流解码为位图。
请记住,不要在主线程中运行此代码。否则它将阻止任何内容,直到图像被下载和解码。
try {
URL url = new URL("http://www.samplesite.com/Customer/File/DownloadResource/" + imageID + "?token="+ m_token);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
Bitmap mBitmap = BitmapFactory.decodeStream(urlConnection.getInputStream());
urlConnection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
答案 1 :(得分:1)
要异步下载多个图像文件,您应该使用Universal Image Loader,Fresco,Picasso,Glide,Volley Image Loader等库。
我个人最喜欢的是Universal Image Loader
它为您提供了执行某些任务的选项,例如onLoadingStarted, onLoadingFailed, onLoadingComplete, onLoadingCancelled
等等。
这是从服务器加载图像而不打扰asycTask的最佳方法,它在列表视图中运行良好。