2014-01-25 183 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

另外,您創建的「視圖」參數和「視圖」是一個一樣的 - 它是回收利用! - 檢查視圖是否爲空,如果是,則膨脹到該變量中,否則不要做任何充氣! –