我想将XML数据解析到我的Android应用程序中,但它无法正常工作?

时间:2014-08-09 10:10:11

标签: android xml-parsing

我正在尝试使用XMLPull解析器解析XML数据,但它无法正常工作我只是从其中一个教程中获取代码

package com.example.xmlparser;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.util.Log; 
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;


public class HandleXML {

 private String country = "county";
 private String temperature = "temperature";
 private String humidity = "humidity";
 private String pressure = "pressure";
 private String urlString = null;
 private XmlPullParserFactory xmlFactoryObject;
 public volatile boolean parsingComplete = true;
 public HandleXML(String url){
  this.urlString = url;
  }
    public String getCountry(){
    return country;
  }
    public String getTemperature(){
    return temperature;
  }
    public String getHumidity(){
    return humidity;
 }
 public String getPressure(){
   return pressure;
 }

 public void parseXMLAndStoreIt(XmlPullParser myParser) {
  int event;
  String text=null;
  try {
     event = myParser.getEventType();
     while (event != XmlPullParser.END_DOCUMENT) {
        String name=myParser.getName();
        switch (event){
           case XmlPullParser.START_TAG:
           break;
           case XmlPullParser.TEXT:
           text = myParser.getText();
           break;

           case XmlPullParser.END_TAG:
              if(name.equals("country")){
                 country = text;
              }
              else if(name.equals("humidity")){     
                 humidity = myParser.getAttributeValue(null,"value");
              }
              else if(name.equals("pressure")){
                 pressure = myParser.getAttributeValue(null,"value");
              }
              else if(name.equals("temperature")){
                 temperature = myParser.getAttributeValue(null,"value");
              }
              else{
              }
              break;
              }      
              event = myParser.next(); 

          }
             parsingComplete = false;
  } catch (Exception e) {
     e.printStackTrace();
  }

  }
   public void fetchXML(){
   Thread thread = new Thread(new Runnable(){
     @Override
     public void run() {
        try {
           URL url = new URL(urlString);
           HttpURLConnection conn = (HttpURLConnection) 
           url.openConnection();
              conn.setReadTimeout(10000 /* milliseconds */);
              conn.setConnectTimeout(15000 /* milliseconds */);
              conn.setRequestMethod("GET");
              conn.setDoInput(true);
              conn.connect();
        InputStream stream = conn.getInputStream();

        xmlFactoryObject = XmlPullParserFactory.newInstance();
        XmlPullParser myparser = xmlFactoryObject.newPullParser();

        myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES
        , false);
        myparser.setInput(stream, null);
        parseXMLAndStoreIt(myparser);
        stream.close();
        } catch (Exception e) {
           e.printStackTrace();
        }
    }
    });

   thread.start(); 


  }

}

它只显示正确的国家/地区,其他文本框中没有填充任何数据。

这是输出的图像![在此输入图像描述] [1]

1 个答案:

答案 0 :(得分:0)

尝试更改代码行:

 humidity = myParser.getAttributeValue(null,"value");

经由

 humidity = parser.nextText();

希望这可以帮助你。