Я использую этот код:Как скачать изображение с адреса?
private class AsyncGetCatalogs extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Map<String, String> catalogsBuffer = Requester.getCatalog();
catalogsNumber = catalogsBuffer.size();
catalogs = new catalogInfo[catalogsNumber];
int n = 0;
for(Map.Entry<String, String> entry : catalogsBuffer.entrySet()) {
catalogs[n] = new catalogInfo();
String name = entry.getKey();
String link = entry.getValue();
String imageLink = Requester.getCatalogImageLink(name);
byte imgBuf[] = Requester.getCatalogImage(imageLink);
Bitmap bitmap = BitmapFactory.decodeByteArray(imgBuf, 0, imgBuf.length);
catalogs[n].setBitmap(bitmap);
catalogs[n].setCatLink(link);
catalogs[n].setCatName(name);
n++;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
try {
LinearLayout catsLayouts[] = new LinearLayout[catalogsNumber];
for(int i=0;i<catalogsNumber;i++) {
catsLayouts[i] = new LinearLayout(getApplicationContext());
ImageView catImageView = new ImageView(getApplicationContext());
catImageView.setImageBitmap(catalogs[i].getImage());
catsLayouts[i].addView(catImageView);
mainLayout.addView(catsLayouts[i]);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
аварий приложений на:
byte imgBuf[] = Requester.getCatalogImage(imageLink);
С такой трассировки стека;
01-25 00:22:26.998: E/AndroidRuntime(975): FATAL EXCEPTION: AsyncTask #2
01-25 00:22:26.998: E/AndroidRuntime(975): java.lang.RuntimeException: An error occured while executing doInBackground()
01-25 00:22:26.998: E/AndroidRuntime(975): at android.os.AsyncTask$3.done(AsyncTask.java:278)
01-25 00:22:26.998: E/AndroidRuntime(975): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
01-25 00:22:26.998: E/AndroidRuntime(975): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
01-25 00:22:26.998: E/AndroidRuntime(975): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
01-25 00:22:26.998: E/AndroidRuntime(975): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-25 00:22:26.998: E/AndroidRuntime(975): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
01-25 00:22:26.998: E/AndroidRuntime(975): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-25 00:22:26.998: E/AndroidRuntime(975): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-25 00:22:26.998: E/AndroidRuntime(975): at java.lang.Thread.run(Thread.java:856)
01-25 00:22:26.998: E/AndroidRuntime(975): Caused by: java.lang.NoClassDefFoundError: javax.imageio.ImageIO
01-25 00:22:26.998: E/AndroidRuntime(975): at IrkroseRequester.IrkroseRequester.getCatalogImage(IrkroseRequester.java:152)
01-25 00:22:26.998: E/AndroidRuntime(975): at com.example.client.MainContentActivity$AsyncGetCatalogs.doInBackground(MainContentActivity.java:79)
01-25 00:22:26.998: E/AndroidRuntime(975): at com.example.client.MainContentActivity$AsyncGetCatalogs.doInBackground(MainContentActivity.java:1)
01-25 00:22:26.998: E/AndroidRuntime(975): at android.os.AsyncTask$2.call(AsyncTask.java:264)
01-25 00:22:26.998: E/AndroidRuntime(975): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
** getCatalog Изображение **
public byte[] getCatalogImage(String _link) throws IOException {
String link = "http://irkrose.ru/images/catalogImages/"+_link;
URL url = new URL(_link);
BufferedImage img = ImageIO.read(url);
ByteArrayOutputStream res = new ByteArrayOutputStream();
ImageIO.write(img, "jpg", res);
return res.toByteArray();
}
Как я понимаю, он не может найти ImageIO. Я знаю, что у андроида это не так, но вся функция, использующая ImageIO, находится в другом пакете java, просто добавленном в приложение как lib. Приложение android работает только с байтовым массивом.
Итак, что не так? И как я могу загрузить .jpg изображение с URL-адреса другим способом? И может быть проблема с классом async?
Пожалуйста, следуйте моему ответу http://stackoverflow.com/questions/541966/how-do-i-do-a-lazy-load-of-images-in-listview/14827292#14827292 –
'ImageIO' является класс JAVA SE, который не является avaialble для Android API .. Конечно, Android использует Java, но настроен в некоторой степени. –
Android_Query - одна из лучших библиотек. и ваша проблема будет решена –