SAXParser与android

SAXParser与android,android,xml-parsing,saxparser,Android,Xml Parsing,Saxparser,我的项目需要帮助,我有一个web服务,它返回如下XML响应: <ads> <id>6</id> <lnk>http://www.nkahtani.com/</lnk> </ads> AdvList.java public class AdvParser extends DefaultHandler{ String elementValue = null; Boolean elementOn

我的项目需要帮助,我有一个web服务,它返回如下XML响应:

  <ads>
    <id>6</id>
    <lnk>http://www.nkahtani.com/</lnk>
  </ads>
AdvList.java

   public class AdvParser extends DefaultHandler{


String elementValue = null;
Boolean elementOn = false;
public static AdvList sitesList = null;

public static AdvList getSitesList() {
    return sitesList;
}

public static void setSitesList(AdvList sitesList) {
    AdvParser.sitesList = sitesList;
}


@Override
public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException {
    // TODO Auto-generated method stub
    super.startElement(uri, localName, qName, attributes);

    elementOn=true;
    if (localName.equals("ads"))
    {
        sitesList = new AdvList();
    } else if (localName.equals("id")) {

    }

}

    @Override
     public void endElement(String uri, String localName, String qName)
    throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
elementOn = false;

/** 
 * Sets the values after retrieving the values from the XML tags
 * */ 
if (localName.equalsIgnoreCase("id"))
    sitesList.setId(elementValue);
else if (localName.equalsIgnoreCase("lnk"))
    sitesList.setLink(elementValue);

    }

    @Override
      public void characters(char[] ch, int start, int length)
    throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
if (elementOn) {
    elementValue = new String(ch, start, length);
    Log.i("XMLParser", elementValue);
    elementOn = false;
}

 }
  }
 public class AdvList {

private ArrayList<String> link = new ArrayList<String>();
private ArrayList<String> id = new ArrayList<String>();


public ArrayList<String> getLink() {
    return link;
}
public void setLink( String link) {
    this.link .add(link);
}
public ArrayList<String> getId() {
    return id;
}
public void setId(String id) {
    this.id .add(id);
}
  }
公共类AdvList{
private ArrayList link=new ArrayList();
private ArrayList id=new ArrayList();
公共阵列列表getLink(){
返回链接;
}
公共无效设置链接(字符串链接){
this.link.add(link);
}
公共ArrayList getId(){
返回id;
}
公共无效集合id(字符串id){
此.id.add(id);
}
}
这将调用URL

    public class RegisterTask extends AsyncTask<Void, Integer,  String> {
    ProgressDialog dialog;

       protected String doInBackground(Void... N) {
         publishProgress(0);
        try {
            //Result = LoginRequest();


            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            XMLReader xmlReader=saxParser.getXMLReader();
            AdvParser handler = new AdvParser(); 
             xmlReader.setContentHandler(handler);
            URL url = new URL("http://82.192.79.39:9000/api/ads/get");
            HttpURLConnection connection =        (HttpURLConnection)url.openConnection();

            connection.setRequestMethod("POST");
            is = connection.getInputStream();

            xmlReader.parse(new InputSource(is));
            //saxParser.parse(is, handler);
            //Log.i("Pars", handler.getNameAtt() +"  "+handler.getNameAtt());

                // TODO Auto-generated catch block

     return "hi";
            } 
            catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                  return null;
            }       
       }
       @Override
        protected void onProgressUpdate(Integer... progress) {
        if(progress[0] == 0)
        {
            dialog = ProgressDialog.show(SplashScreen.this, "Please wait", 
                       "Login ,Please wait.", true);
               super.onProgressUpdate(progress);
        }
       }
       protected void onPostExecute(InputStream result) {


         dialog.dismiss();
       }
   }
公共类寄存器任务扩展异步任务{
进程对话;
受保护字符串DOIN背景(无效…N){
出版进度(0);
试一试{
//结果=LoginRequest();
SAXParserFactory=SAXParserFactory.newInstance();
SAXParser SAXParser=factory.newSAXParser();
XMLReader=saxParser.getXMLReader();
AdvParser handler=新的AdvParser();
setContentHandler(handler);
URL=新URL(“http://82.192.79.39:9000/api/ads/get");
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
is=connection.getInputStream();
parse(新的InputSource(is));
//parse(is,handler);
//Log.i(“Pars”,handler.getNameAtt()+“”+handler.getNameAtt());
//TODO自动生成的捕捉块
返回“hi”;
} 
捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
返回null;
}       
}
@凌驾
受保护的void onProgressUpdate(整数…进度){
如果(进度[0]==0)
{
dialog=ProgressDialog.show(SplashScreen.this,“请稍候”,
“登录,请稍候。”,对);
super.onProgressUpdate(进度);
}
}
受保护的void onPostExecute(InputStream结果){
dialog.dismise();
}
}
我的代码中没有任何异常,但问题是我没有得到任何结果,解析器只解析第一个标记(ads),没有读取其他标记(id,lnk) 有人能告诉我怎么解决吗


感谢

不久前我遇到了一个类似的问题,对我有效的是我对所有标记使用了不同的布尔值,对所有标记值使用了不同的StringBuilder。下面是对处理程序的一些小修改

public static final String ID = "id";
public static final String LINK = "lnk";
Boolean bool_id, bool_link,flag;
StringBuilder out_id,out_link;
Boolean elementOn = false;

public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException {
    if (localName.equalsIgnoreCase("ads")) {
        flag = true;
    }
    if (flag) {
        if (localName.equalsIgnoreCase(ID)) {
            out_id= new StringBuilder();
            elementOn = true;
            bool_id= true;
        } else if (localName.equalsIgnoreCase(LINK)) {
            out_link = new StringBuilder();
            elementOn = true;
            bool_link = true;
        }
    }
}

public void characters(char[] ch, int start, int length)
        throws SAXException {
    if (elementOn) {
        if (bool_id)
            out_id.append(new String(ch, start, start + length));
        else if (bool_link)
            out_link.append(new String(ch, start, start + length));
       }
 }

 public void endElement(String uri, String localName, String qName)
        throws SAXException {
    if (elementOn) {
        elementOn = false;
        if (localName.equalsIgnoreCase(ID)) {
            sitesList.setId(out_id.toString());
            bool_id = false;
        } else if (localName.equalsIgnoreCase(LINK)) {
            sitesList.setLink(out_link.toString());
            bool_link= false;
                   }
             }
       }
希望这有帮助