2014-01-25 189 views
-1

我试图用Android Studio显示rss提要的图像,但我不知道如何操作。我可以得到所有其他项目,但我不知道为什么我无法获取图像。你能帮我吗? 这是我Handler从rss feed获取图像

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; 
} 

编辑 我如何显示图像

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

你已经发布的代码是不是真正的问题有关,您应该已经取饲料和解析它来提取网址,然后你可以做以下事情,但是我会推荐Square的Picasso,它会完成所有繁重的工作,并添加缓存和中断请求等功能atodic - 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

查看您的编辑原因?这个解决方案是有效的,你认为你的新问题改变了吗?至于编辑本身 - 非常糟糕 - get view可以被称为DOZENS次,所有这些都在UI线程上 - 不要在该方法中(或任何时候在UI线程中)执行网络活动。请使用视图保存模式来节省昂贵的查找视图调用并做缓存! –

+0

另外,您创建的“视图”参数和“视图”是一个一样的 - 它是回收利用! - 检查视图是否为空,如果是,则膨胀到该变量中,否则不要做任何充气! –