Ошибка чтения RSS при форматировании даты - PullRequest
0 голосов
/ 03 апреля 2012

Итак, у меня есть отличный исходный код для чтения RSS, он отлично работает, но у меня есть одна проблема, мне нужно преобразовать дату с пт, 30 марта 2012 05:09:20 +0000 в простой формат "гггг / мм / дд чч: мм: сс ", но я не могу заставить его работать, потому что конфликтуют два типа данных, NodeList и Date.

public class rssparser {


private static NodeList newdate;

private static NodeList formmatter;
private static NodeList formatter;
private static Intent event;
private static ResourceBundle bundle;
private static NodeList pubdate1;


public static void parse(){
URL url;
try {
    url = new URL("http://www.gaudeamus.fm/feed/");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder db = dbf.newDocumentBuilder();
          Document doc;
          doc = db.parse(url.openStream());
          doc.getDocumentElement().normalize();
          NodeList itemLst = doc.getElementsByTagName("item");



          arrays.PodcastTitle = new String[itemLst.getLength()];
          arrays.PodcastURL = new String[itemLst.getLength()];
          arrays.PodcastContent = new String[itemLst.getLength()];
          arrays.PodcastMedia = new String[itemLst.getLength()];
          arrays.PodcastPubDate = new String[itemLst.getLength()];

       // SimpleDateFormat pubdate = new SimpleDateFormat("yyyy MM dd HH:mm:ss");
       // Date formmater = formatter.parse("Sat, 24 Apr 2010 14:01:00 GMT");


          for(int i=0; i < itemLst.getLength(); i++){

                Node item = itemLst.item(i);
                if(item.getNodeType() == Node.ELEMENT_NODE) {
                    Element ielem = (Element) item;
                    NodeList title = ielem.getElementsByTagName("title");
                    NodeList link = ielem.getElementsByTagName("link");
                    NodeList pubdate = ielem.getElementsByTagName("pubDate");
                    //NodeList description = ielem.getElementsByTagName("description");
                    NodeList content = ielem.getElementsByTagName("content:encoded");


                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                     String formatedDate =sdf.parse(pubdate);


                    arrays.PodcastTitle[i] = title.item(0).getChildNodes().item(0).getNodeValue();
                        arrays.PodcastTitle[i] +=formatedDate+"  \n" + pubdate.item(0).getChildNodes().item(0).getNodeValue();
                        arrays.PodcastURL[i] = link.item(0).getChildNodes().item(0).getNodeValue();
                        arrays.PodcastContent[i] = content.item(0).getChildNodes().item(0).getNodeValue();
                        arrays.PodcastPubDate[i] = pubdate.item(0).getChildNodes().item(0).getNodeValue();
                        //arrays.PodcastMedia[i] = mediaurl;




                }

          }

    }

} catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (DOMException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ParserConfigurationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (SAXException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

}


}

Это код,

String formatedDate =sdf.parse(pubdate); но моя проблема в том, что для разбора нужен тип String, но у меня есть NodeList, я перепробовал много вариантов, но он не будет работать. Если я делаю не анализ, а форматирую String formatedDate =sdf.format(pubdate);, это не выдает никакой ошибки, но при запуске приложения происходит сбой при загрузке новостей.

Может ли кто-нибудь мне помочь? Извините за плохой английский.

Ответы [ 3 ]

0 голосов
/ 03 апреля 2012

у вас проблема не только с анализом XML.у вас также есть проблема с разбором формата времени

SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss Z");
Date formatedDate = sdf.parse(((Node)((Element)pubdate.item(0)).getChildNodes().item(0)).getNodeValue());
0 голосов
/ 21 ноября 2012

Попробуйте указать формат США:

public void setPubDate(String pubDate) {
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss z", Locale.US);
        this.pubDate = dateFormat.parse(pubDate);

    } catch (java.text.ParseException e) {
        Log.e("MySoft", title);
    }
}
0 голосов
/ 03 апреля 2012

Разобрать это:

arrays.PodcastPubDate[i] = pubdate.item(0).getChildNodes().item(0).getNodeValue(); 

Вместо NodeList?Я предполагаю, что это String;Вы не можете просто разобрать NodeList, это не имеет никакого логического смысла.

...