2014-01-25 2 views
-1

Я пытаюсь отобразить изображения rss-канала с помощью Android Studio, но я не знаю, как это сделать. Я могу получить все остальные предметы, но я не знаю, почему я не могу получить изображения. Не могли бы вы мне помочь? Это мой Handler:Получить изображения из rss-канала

public class RSSHandler extends DefaultHandler { 

final int state_unknown = 0; 
final int state_title = 1; 
final int state_description = 2; 
final int state_link = 3; 
final int state_pubdate = 4; 
final int state_enclosure = 5; 
final int state_url = 6; 
int currentState = state_unknown; 

RSSFeed feed; 
RSSItem item; 

boolean itemFound = false; 

RSSHandler(){ 
} 

RSSFeed getFeed(){ 
    return feed; 
} 

@Override 
public void startDocument() throws SAXException { 
// TODO Auto-generated method stub 
    feed = new RSSFeed(); 
    item = new RSSItem(); 

} 

@Override 
public void endDocument() throws SAXException { 
// TODO Auto-generated method stub 
} 

@Override 
public void startElement(String uri, String localName, String qName, 
         Attributes attributes) throws SAXException { 
// TODO Auto-generated method stub 

    if (localName.equalsIgnoreCase("item")){ 
     itemFound = true; 
     item = new RSSItem(); 
     currentState = state_unknown; 
    } 
    else if (localName.equalsIgnoreCase("url")){ 
     currentState = state_url; 
    } 
    //{ 
     // if (!attributes.getValue("url").equalsIgnoreCase("null")) { 
     // feed.setImage(attributes.getValue("url")); 
     //} else { 
     // feed.setImage(""); 
     //} 
     // currentState = state_image; 
    //} 
    else if (localName.equalsIgnoreCase("enclosure")){ 
     currentState = state_enclosure; 
    } 
    else if (localName.equalsIgnoreCase("title")){ 
     currentState = state_title; 
    } 
    else if (localName.equalsIgnoreCase("description")){ 
     currentState = state_description; 
    } 
    else if (localName.equalsIgnoreCase("link")){ 
     currentState = state_link; 
    } 
    else if (localName.equalsIgnoreCase("pubdate")){ 
     currentState = state_pubdate; 
    } 
    else{ 
     currentState = state_unknown; 
    } 

} 

@Override 
public void endElement(String uri, String localName, String qName) 
     throws SAXException { 
// TODO Auto-generated method stub 
    if (localName.equalsIgnoreCase("item")){ 
     feed.addItem(item); 
    } 
} 

@Override 
public void characters(char[] ch, int start, int length) 
     throws SAXException { 
// TODO Auto-generated method stub 

    String strCharacters = new String(ch,start,length); 

    if (itemFound==true){ 
// "item" tag found, it's item's parameter 
     switch(currentState){ 
      case state_url: 
       item.setUrl(strCharacters); 
       break; 
      case state_enclosure: 
       item.setEnclosure(strCharacters); 
       break; 
      case state_title: 
       item.setTitle(strCharacters); 
       break; 
      case state_description: 
       item.setDescription(strCharacters); 
       break; 
      case state_link: 
       item.setLink(strCharacters); 
       break; 
      case state_pubdate: 
       item.setPubdate(strCharacters); 
       break; 
      default: 
       break; 
     } 
    } 
    else{ 
// not "item" tag found, it's feed's parameter 
     switch(currentState){ 
      case state_url: 
       feed.setUrl(strCharacters); 
       break; 
      case state_enclosure: 
       feed.setEnclosure(strCharacters); 
       break; 
      case state_title: 
       feed.setTitle(strCharacters); 
       break; 
      case state_description: 
       feed.setDescription(strCharacters); 
       break; 
      case state_link: 
       feed.setLink(strCharacters); 
       break; 
      case state_pubdate: 
       feed.setPubdate(strCharacters); 
       break; 
      default: 
       break; 
     } 
    } 

    currentState = state_unknown; 
} 

EDIT как я показываю изображения

try { 
    URL url = new URL(web.get(position).getEnclosure()+web.get(position).getUrl()); 
     HttpGet httpRequest; 

     httpRequest = new HttpGet(url.toURI()); 

     HttpClient httpclient = new DefaultHttpClient(); 
    HttpResponse response = httpclient 
      .execute(httpRequest); 

     HttpEntity entity = response.getEntity(); 
     BufferedHttpEntity b_entity = new BufferedHttpEntity(entity); 
     InputStream input = b_entity.getContent(); 
     ImageView img = (ImageView) rowView.findViewById(R.id.enclosure); 
     Bitmap bitmap = BitmapFactory.decodeStream(input); 

     img.setImageBitmap(bitmap); 

     } catch (Exception ex) { 
     ex.printStackTrace(); 
     } 
+0

Android Studio - это только IDE, которую вы используете, и не имеет отношения к вопросу. –

+0

Это должно быть более конкретно;) – Pier

+0

ОК, тогда извините;) –

ответ

1

код Вы разместили на самом деле не относятся к проблеме, вы должны уже неправдоподобным фид и проанализировал его, чтобы извлечь URL-адреса, вы можете сделать следующее, однако я бы порекомендовал Picasso из Square вместо этого, который будет выполнять все функции тяжелого подъема и добавления, такие как кэширование и прерывание запросов autom atically - http://square.github.io/picasso/

try { 
    InputStream inStream = (InputStream) new URL(url).getContent(); 
    Drawable d = Drawable.createFromStream(inStream, "my source name"); 
    return d; 
} catch (Exception e) { 
    return null; 
} 
+0

См. Мой отредактированный вопрос – Pier

+0

Смотрите ваши правки почему? Это решение действительно, как вы думаете, ваш новый вопрос меняется? Что же касается самих прав редактирования - крайне плохо - получить представление можно назвать ДОЗАМ времени, все в потоке пользовательского интерфейса - НЕ делайте сетевые действия в этом методе (или в любое время в потоке пользовательского интерфейса). DO используйте шаблон держателя вида, чтобы сэкономить на дорогих вызовах поиска в режиме просмотра и сделать кеширование! –

+0

Также параметр «view» и созданный вами «viewrow» являются одним и тем же - это утилизация! - проверьте, нет ли пустого представления, и раздуйте его в эту переменную, если это не так, иначе не раздувайте! –

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