2013-10-01 3 views
1

Я использую SAX-парсер в android для извлечения данных XML из URL-адреса, но я все еще не получаю, где хранится ответ.Ответ от XML-анализатора в android

Код:

String c=city.getText().toString(); 
String s=state.getText().toString(); 
StringBuilder URL=new StringBuilder(baseURL); 
URL.append(c+","+s); 
try{ 
    SAXParserFactory factory=SAXParserFactory.newInstance(); 
    SAXParser parser=factory.newSAXParser(); 
    XMLReader reader=parser.getXMLReader(); 
    HandlingXMLStuff handler=new HandlingXMLStuff(); 
    reader.setContentHandler(handler); 
    URL url = new 
    URL("http://api.openweathermap.org/data/2.5/weathermode=xml&q="+c+","+s); 
    HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
    reader.parse(new InputSource(connection.getInputStream())); 
String information=handler.getInformation(); 
output.setText(information); 
} 
catch(Exception e) 
{ 
    output.setText(e.toString()); 
} 

Мой вопрос, где хранится ответ и как получить к нему доступ, чтобы получить желаемую информацию из XML?

EDIT: Большое спасибо за помощь, ребята .. теперь я понял логику .. Но я столкнулся с другой проблемой ....

КОД:

String c = city.getText().toString(); 
    String s = state.getText().toString(); 
    try { 
     SAXParserFactory factory = SAXParserFactory.newInstance(); 
     SAXParser parser = factory.newSAXParser(); 
     XMLReader reader = parser.getXMLReader(); 
     HandlingXMLStuff handler = new HandlingXMLStuff(); 
     reader.setContentHandler(handler); 
     String query = URLEncoder.encode(
     "http://api.openweathermap.org/data/2.5/weather?mode=xml&q=" 
         + c + "," + s, "utf-8"); 
URL url = new URL("http://api.openweathermap.org/data/2.5/weather?mode=xml&q=" 
       + c + "," + s); 
     HttpURLConnection connection = (HttpURLConnection) url 
       .openConnection(); 
     reader.parse(new InputSource(connection.getInputStream())); 
     String information = handler.getInformation(); 
     output.setText(information); 
    } catch (Exception e) { 
     output.setText(e.toString()); 
    } 

Я не получаю ответа от url, получение ошибки "невозможно разобрать null как int". Любая идея, что происходит? Я поместил тот же URL-адрес в браузер и получил правильный ответ, но не работал здесь.

Редактировать: Исправлено. Некоторые ошибки из моего обработчика функции XD

+0

проверка [это] (http://stackoverflow.com/questions/4413051/parse-xml-retrieve-info-several- layer-of-nodes-deep-java-android? rq = 1) –

+0

Вы изучали HTTP-запрос для Android? Если после этого 1-го не прочитано, чтобы у вас было лучшее понимание HTTPRequest и как получить его ответ –

ответ

0
feedParser oFeedParser = new feedParser(MainActivity.this); 
       try { 
        /** 
        * Create a new instance of the SAX parser 
        **/ 
        SAXParserFactory saxPF = SAXParserFactory.newInstance(); 
        SAXParser saxP = saxPF.newSAXParser(); 
        XMLReader xmlR = saxP.getXMLReader(); 
        URL url = new URL("Your_URL"); // URL of the XML 

        xmlR.setContentHandler(oFeedParser); 
        xmlR.parse(new InputSource(url.openStream())); 
        handler.sendEmptyMessage(0); 

       } catch(IOException e) { 
        System.out.println(e); 
        handler.sendEmptyMessage(1); 
       } catch (Exception e) { 
        System.out.println(e); 
       } finally { 
        oFeedParser.closeDataBase(); 
       } 
      } 

и feedParser класса

public class feedParser extends DefaultHandler { 

    String elementValue = null; 
    boolean elementOn, isFeedInitialized = false; 
    feed oFeed; 
    feedsDAO dao; 

    public feedParser(Context context) { 
     dao = new feedsDAO(context); 
     dao.open(); 
    } 

    public void closeDataBase() { 
     dao.close(); 
    } 

    /** 
    * This will be called when the tags of the XML starts. 
    **/ 
    @Override 
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 

     if (localName.equals("ITEM_NAME")) { 
     } 
    } 

    /** 
    * This will be called when the tags of the XML end. 
    **/ 
    @Override 
    public void endElement(String uri, String localName, String qName) throws SAXException { 

     if (localName.equals("ITEM_NAME")) { 

     } 
    } 

    /** 
    * This is called to get the tags value 
    **/ 
    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException { 
     if (elementOn) { 
      elementValue = new String(ch, start, length); 
      elementOn = false; 
     } 
    } 
} 
Смежные вопросы