2012-01-25 2 views
3

Я пытаюсь извлечь и применить изображение исполнителя от Last.fm до ImageView, но изображения не будет возвращено. Я не уверен, что я делаю неправильно здесь.Last.fm не возвращает изображение исполнителя

private void setLastFmArtistImage() { 

    try { 
     String imageurl = "http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=" 
       + URLEncoder.encode("Andrew Bird") 
       + "&api_key=" 
       + APIKEY 
       + "&limit=" + 1 + "&page=" + 1; 
     InputStream in = null; 

     Log.i("URL", imageurl); 
     URL url = new URL(imageurl); 
     URLConnection urlConn = url.openConnection(); 

     HttpURLConnection httpConn = (HttpURLConnection) urlConn; 

     httpConn.connect(); 

     in = httpConn.getInputStream(); 

     Bitmap bmpimg = BitmapFactory.decodeStream(in); 
     mArtistBackground.setImageBitmap(bmpimg); 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

требуется более подробная информация ... Если изображение не возвращается, тогда WHAT i s возвращается? Это основные отладочные вещи, которые необходимо проанализировать. – JoxTraex

+0

Ничего не возвращается, я упоминаю об этом. Ничего не меняется. – adneal

+0

данные не возвращаются? если вы перейдете к этой ссылке, она вернет что-нибудь в браузере? – JoxTraex

ответ

6

В API вы пытаетесь использовать возвращает XML, не изображение. Вам нужно проанализировать ответ и выбрать соответствующий URL изображения из ответа.

API documentation довольно подробно, и просмотр отклика образца для каждого любимого художника Benny Hill даст вам достаточно направления, чтобы найти подходящее изображение для отображения.

Редактировать: Для примера API вы можете посмотреть на официальном Last.fm client - остерегайтесь, хотя, это GPL3 лицензию вещи, и если вы не чувствуете, как отпуская источник, который вы не должны играть слишком много с копией & паста.

Edit (снова): Для примера, который не испорченной с GPL3, попробуйте следующее:

(В данном примере используется JSoup, дружественный XML парсер)

public List<LastFmImage> getLastFmImages(String artistName, int limit, int page) throws IOException { 
    String apiUrl = "http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=" 
      + URLEncoder.encode(artistName) 
      + "&api_key=" 
      + APIKEY 
      + "&limit=" + limit + "&page=" + page; 

    Document doc = Jsoup.connect(apiUrl).timeout(20000).get(); 
    Elements images = doc.select("images"); 

    ArrayList<LastFmImage> result = new ArrayList<LastFmImage>(); 
    final int nbrOfImages = images.size(); 
    for (int i = 0; i < nbrOfImages; i++) { 
     Element image = images.get(i); 
     String title = image.select("title").first().text(); 
     Elements sizes = image.select("sizes").select("size"); 
     final int nbrOfSizes = sizes.size(); 
     for (int j = 0; j < nbrOfSizes; j++) { 
      Element size = sizes.get(i); 

      result.add(new LastFmImage(title, size.text(), 
        size.attr("name"), 
        Integer.parseInt(size.attr("width")), 
        Integer.parseInt(size.attr("height")))); 
     } 
    } 
    return result; 
} 

И класс LastFmImage:

public class LastFmImage { 
    public String mTitle; 
    public String mUrl; 
    public String mName; 
    public int mWidth; 
    public int mHeight; 

    public LastFmImage(String title, String url, String name, int width, int height) { 
     mTitle = title; 
     mUrl = url; 
     mName = name; 
     mWidth = width; 
     mHeight = height; 
    } 
} 
+0

Я занимаюсь документами API, на самом деле у меня есть их прямо сейчас. Я думаю, моя проблема в том, что я не уверен, как получить изображение из XML. Спасибо за совет. Я на самом деле пытаюсь избежать копирования и вставки. Я действительно хочу узнать, как это сделать. – adneal

+0

Загрузите XML и проанализируйте его, и это должно быть довольно очевидным. – JoxTraex

+0

@Jens Ваш пример чрезвычайно полезен. Это мой первый раз синтаксический анализ XML, поэтому я не мог попросить больше. Спасибо, я ценю это. Я до сих пор не совсем понимаю, как я устанавливаю растровое изображение, но я уверен, что все пойму. – adneal

Смежные вопросы