Образцы изображений Android с URL-адреса

В настоящее время я использую следующий фрагмент кода для загрузки изображений в виде объектов с возможностью рисования из URL.

Drawable drawable_from_url(String url, String src_name) throws java.net.MalformedURLException, java.io.IOException { return Drawable.createFromStream(((java.io.InputStream)new java.net.URL(url).getContent()), src_name); } 

Этот код работает точно так же, как и требовалось, но, похоже, проблемы совместимости с ним. В версии 1.5 он FileNotFoundException когда я даю ему URL. В 2.2, учитывая тот же URL-адрес, он отлично работает. Следующий URL-адрес представляет собой образец ввода, который я предоставляю этой функции.

 http://bks6.books.google.com/books?id=aH7BPTrwNXUC&printsec=frontcover&img=1&zoom=5&edge=curl&sig=ACfU3U2aQRnAX2o2ny2xFC1GmVn22almpg 

Как я могу загружать изображения таким образом, который совместим по всем направлениям с URL?

Растровое изображение не является Drawable. Если вам действительно нужен Drawable, выполните следующие действия:

 public static Drawable drawableFromUrl(String url) throws IOException { Bitmap x; HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); connection.connect(); InputStream input = connection.getInputStream(); x = BitmapFactory.decodeStream(input); return new BitmapDrawable(x); } 

(Я использовал подсказку, найденную в https://stackoverflow.com/a/2416360/450148 )

Решил сам. Я загрузил его в виде растрового изображения, используя следующий код.

 Bitmap drawable_from_url(String url) throws java.net.MalformedURLException, java.io.IOException { HttpURLConnection connection = (HttpURLConnection)new URL(url) .openConnection(); connection.setRequestProperty("User-agent","Mozilla/4.0"); connection.connect(); InputStream input = connection.getInputStream(); return BitmapFactory.decodeStream(input); } 

Также важно добавить в пользовательский агент, поскольку googlebooks запрещает доступ, если он отсутствует

Я не уверен, но я думаю, что Drawable.createFromStream () больше предназначен для использования с локальными файлами, а не для загрузки InputStreams. Попробуйте использовать BitmapFactory.decodeStream() , а затем оберните обратный битмап в BitmapDrawable .

Для меня работает следующий код:

 Matrix Mat = new Matrix(); Bitmap Source = BitmapFactory.decodeFile("ItemImagePath"); Bitmap Destination = Bitmap.createScaledBitmap( Source, 320, 320, true ); Source = Bitmap.createBitmap( Destination, 0, 0, Destination.getWidth(), Destination.getHeight(),Mat, true ); ItemImageView.setImageBitmap(Source); 

Вы можете использовать com.androidquery.AndroidQuery, чтобы сделать это довольно просто. Например:

 AQuery aq = new AQuery(this); aq.id(view).image("http://yourserver/yourimage.png", true, true, 300, new BitmapAjaxCallback() { @Override public void callback(String url, ImageView imageView, Bitmap bitmap, AjaxStatus status) { Drawable drawable = new BitmapDrawable(getResources(), bm); } }); 

Если вы используете BitmapAjaxCallback, вы получите доступ к BitMap, который вы можете обернуть как BitmapDrawable.