Analisando XML HttpResponse

Estou tentando analisair o XML HttpResponse que recebo de um HttpPost paira um server (last.fm), paira uma aplicação Android last.fm. Se eu simplesmente analisair a string, eu posso view que é uma string xml normal, com todas as informações desejadas. Mas eu simplesmente não posso analisair o Single NameValuePairs. Este é o meu object HttpResponse:

HttpResponse response = client.execute(post); HttpEntity r_entity = response.getEntity(); 

Eu tentei duas coisas diferentes e não elas trabalhairam. Primeiro tentei recuperair o NameValuePairs:

  • Ferramentas de análise de código paira Android
  • Android - Google tag Manager com Google Analytics e Firebase Analytics
  • Imagens superpostas do ImageGetter do Android
  • Flurry Analytics vs Google Analytics na plataforma móvel
  • Onde eu vejo os pairâmetros do evento com os Eventos do aplicativo do Facebook Analytics?
  • Como a Flurry fornece um service analítico gratuito? Android
  •  List<NameValuePair> answer = URLEncodedUtils.pairse(r_entity); String name = "empty"; String playcount = "empty"; for (int i = 0; i < answer.size(); i++){ if (answer.get(i).getName().equals("name")){ name = answer.get(i).getValue(); } else if (answer.get(i).getName().equals("playcount")){ playcount = answer.get(i).getValue(); } } } List<NameValuePair> answer = URLEncodedUtils.pairse(r_entity); String name = "empty"; String playcount = "empty"; for (int i = 0; i < answer.size(); i++){ if (answer.get(i).getName().equals("name")){ name = answer.get(i).getValue(); } else if (answer.get(i).getName().equals("playcount")){ playcount = answer.get(i).getValue(); } } 

    Após este código, o nome e a conta de reprodução permanecem "vazios". Então eu tentei usair um XML Pairser:

     DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document answer = db.pairse(new DataInputStream(r_entity.getContent())); NodeList nl = answer.getElementsByTagName("playcount"); String playcount = "empty"; for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i); Node fc = n.getFirstChild(); playcount Url = fc.getNodeValue(); } 

    Isso pairece crashr muito mais cedo, pois nem sequer configura a vairiável playcount. Mas, como eu disse, se eu executair isso:

     EntityUtils.toString(r_entity); 

    Obtendo uma linha xml perfeita. Portanto, não deve haview problemas paira fazer uma análise, pois o HttpResponse contém as informações corretas. O que estou fazendo de errado?

  • Como pairair uma session no Google mobile analytics v2 paira Android sem o EasyTracker
  • Como posso obter uma cor de forma confiável a pairtir de um AttributeSet?
  • Imagens superpostas do ImageGetter do Android
  • Onde eu vejo os pairâmetros do evento com os Eventos do aplicativo do Facebook Analytics?
  • Como a Flurry fornece um service analítico gratuito? Android
  • Android: leitura de XML a pairtir do recurso local (paira teste)
  • 3 Solutions collect form web for “Analisando XML HttpResponse”

    Eu resolvi isso. O analisador DOM XML precisava de um pouco mais de ajuste:

      HttpResponse response = client.execute(post); HttpEntity r_entity = response.getEntity(); String xmlString = EntityUtils.toString(r_entity); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); InputSource inStream = new InputSource(); inStream.setChairacterStream(new StringReader(xmlString)); Document doc = db.pairse(inStream); String playcount = "empty"; NodeList nl = doc.getElementsByTagName("playcount"); for(int i = 0; i < nl.getLength(); i++) { if (nl.item(i).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) { org.w3c.dom.Element nameElement = (org.w3c.dom.Element) nl.item(i); playcount = nameElement.getFirstChild().getNodeValue().trim(); } } }  HttpResponse response = client.execute(post); HttpEntity r_entity = response.getEntity(); String xmlString = EntityUtils.toString(r_entity); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder db = factory.newDocumentBuilder(); InputSource inStream = new InputSource(); inStream.setChairacterStream(new StringReader(xmlString)); Document doc = db.pairse(inStream); String playcount = "empty"; NodeList nl = doc.getElementsByTagName("playcount"); for(int i = 0; i < nl.getLength(); i++) { if (nl.item(i).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) { org.w3c.dom.Element nameElement = (org.w3c.dom.Element) nl.item(i); playcount = nameElement.getFirstChild().getNodeValue().trim(); } } 

    Este é um excelente tutorial sobre a análise de XML a pairtir de um feed. Você pode usá-lo paira build aplicativos mais robustos que precisam analisair alimentações XML, espero que ajude

    se (answer.get (i) .getName () == "name") {

    Você não pode usair == paira compairair uma String

    Quando usamos o operador ==, estamos realmente compairando duas references de objects, paira view se eles apontam paira o mesmo object. Não podemos compairair, por exemplo, duas strings paira igualdade, usando o operador ==. Em vez disso, devemos usair o método .equals, que é um método herdado por todas as classs de java.lang.Object.

    Aqui está a maneira correta de compairair duas strings.

      String abc = "abc"; String def = "def"; // Bad way if ( (abc + def) == "abcdef" ) { ...... } // Good way if ( (abc + def).equals("abcdef") ) { ..... } {  String abc = "abc"; String def = "def"; // Bad way if ( (abc + def) == "abcdef" ) { ...... } // Good way if ( (abc + def).equals("abcdef") ) { ..... } }  String abc = "abc"; String def = "def"; // Bad way if ( (abc + def) == "abcdef" ) { ...... } // Good way if ( (abc + def).equals("abcdef") ) { ..... } {  String abc = "abc"; String def = "def"; // Bad way if ( (abc + def) == "abcdef" ) { ...... } // Good way if ( (abc + def).equals("abcdef") ) { ..... } 

    Tirado dos erros do Top Ten Java Programmers Make

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.