2012-02-08 19 views
0

当我基于PHP的web服务时,我得到了解析的一些问题。我从2天仍然陷入困境。我无法在Activity中获得任何输出。当我在Handler中打印时,我成功打印了变量。
这里有一些logcate:SAX解析器提出了一些错误

02-08 00:51:04.889: WARN/System.err(606): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 805: not well-formed (invalid token) 
02-08 00:51:04.893: WARN/System.err(606):  at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:523) 
02-08 00:51:04.893: WARN/System.err(606):  at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:482) 
02-08 00:51:04.893: WARN/System.err(606):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:320) 
02-08 00:51:04.893: WARN/System.err(606):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:277) 
02-08 00:51:04.893: WARN/System.err(606):  at com.ESM.viewAllpartActivity.onCreate(viewAllpartActivity.java:69) 
02-08 00:51:04.893: WARN/System.err(606):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-08 00:51:04.904: WARN/System.err(606):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
02-08 00:51:04.904: WARN/System.err(606):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
02-08 00:51:04.904: WARN/System.err(606):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
02-08 00:51:04.904: WARN/System.err(606):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
02-08 00:51:04.904: WARN/System.err(606):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-08 00:51:04.914: WARN/System.err(606):  at android.os.Looper.loop(Looper.java:123) 
02-08 00:51:04.914: WARN/System.err(606):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
02-08 00:51:04.914: WARN/System.err(606):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-08 00:51:04.914: WARN/System.err(606):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-08 00:51:04.914: WARN/System.err(606):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
02-08 00:51:04.914: WARN/System.err(606):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
02-08 00:51:04.914: WARN/System.err(606):  at dalvik.system.NativeStart.main(Native Method) 

当我有电话xml解析。

这里我有过去的代码:: -

package com.awe; 

import java.net.URL; 
import java.util.ArrayList; 

import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.InputSource; 
import org.xml.sax.XMLReader; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 

public class viewAllpartActivity extends Activity implements 
     OnItemClickListener { 
    /** Called when the activity is first created. */ 
    /* declare widgets */ 

    String nickname; 
    String type; 
    boolean flag = true; 
    ListView lview3; 

    blog_list_adapter adapter; 

    String[] str_blogImage; 
    String[] str_blogtitle; 
    String[] str_morelink; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_allparty); 

     Button home_logout; 
     final Intent homeintent; 
     homeintent = new Intent(viewAllpartActivity.this, MainActivity.class); 
     home_logout = (Button) findViewById(R.id.vap_logout); 
     home_logout.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       startActivity(homeintent); 
       finish(); 

      } 
     }); 
     try { 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      XMLReader xr = sp.getXMLReader(); 

      /** Send URL to parse XML Tags */ 
      URL sourceUrl = new URL(
        "URL?api=ViewBooking_Admin"); 

      /** Create handler to handle XML Tags (extends DefaultHandler) */ 
      viewAllPartyHandler myXMLHandler = new viewAllPartyHandler(); 
      xr.setContentHandler(myXMLHandler); 
      xr.parse(new InputSource(sourceUrl.openStream())); 

      viewAllPartydataset parsedLoginDataSet = myXMLHandler 
        .getParsedRegistrationData(); 
      ArrayList<String> Bookingid = myXMLHandler.getbooking_id(); 
      ArrayList<String> partyname = myXMLHandler.br3; 
      System.out.println("partyname :::: : "+partyname); 
      new xyz().execute(); 

     } catch (Exception e) { 
     e.printStackTrace(); 
     } 

    } 

    private class xyz extends AsyncTask<Void, Void, Void> { 
     private final ProgressDialog dialog = new ProgressDialog(
       viewAllpartActivity.this); 

     @Override 
     protected void onPreExecute() { 
      this.dialog.setMessage("Please Wait..."); 
      this.dialog.show(); 
      this.dialog.setIndeterminate(true); 

      // put your code which preload with processDialog 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      // put your code here 
      try { 
       SAXParserFactory spf = SAXParserFactory.newInstance(); 
       SAXParser sp = spf.newSAXParser(); 
       XMLReader xr = sp.getXMLReader(); 

       /** Send URL to parse XML Tags */ 
       URL sourceUrl = new URL(
         "url?api=ViewBooking_Admin"); 

       /** Create handler to handle XML Tags (extends DefaultHandler) */ 
       viewAllPartyHandler myXMLHandler = new viewAllPartyHandler(); 
       xr.setContentHandler(myXMLHandler); 
       xr.parse(new InputSource(sourceUrl.openStream())); 

       viewAllPartydataset parsedLoginDataSet = myXMLHandler 
         .getParsedRegistrationData(); 
       ArrayList<String> Bookingid = myXMLHandler.getbooking_id(); 
       ArrayList<String> partyname = myXMLHandler.br3; 
       System.out.println("partyname :::: : "+partyname); 
       /*str_blogImage = Bookingid.toArray(new String[Bookingid.size()]); 
       str_morelink = partyname.toArray(new String[partyname.size()]);*/ 
       System.out.println("partyname :::: : "+partyname); 

      } catch (Exception e) { 
       // TODO: handle exception 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(final Void unused) { 

      lview3 = (ListView) findViewById(R.id.vap_listview); 
      /*lview3.setAdapter(new 
        ArrayAdapter<String>(viewAllpartActivity.this,android.R.layout.simple_list_item_1 , 
          str_morelink));*/ 

      lview3.setOnItemClickListener(viewAllpartActivity.this); 

      if (this.dialog.isShowing()) { 
       this.dialog.dismiss(); 

      } 
     } 
    } 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

     System.out.println("str_morelink ::: " + arg2); 

     Bundle b = new Bundle(); 
     b.putString("url", str_morelink[arg2]); 
     Intent i1 = new Intent(getBaseContext(), blogwebview.class); 
     i1.putExtras(b); 
     startActivity(i1); 
     // finish(); 

    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      Intent homeback; 

      homeback = new Intent(viewAllpartActivity.this, home.class); 
      startActivity(homeback); 

      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
} 
+1

看来你的XML格式不正确格式化(可能有特殊字符)。我会建议记录xml,并确保你得到正确的xml。 – kosa 2012-02-08 16:07:03

+0

你可以显示你正在尝试解析的XML吗? – 2012-02-08 16:11:35

+0

如果你的xml格式正确,我会看看这里:http://stackoverflow.com/questions/8827006/sax-expatparserparseexception。 – javanna 2012-02-08 18:02:21

回答

0

有问题,您的XML和室内用专门“&” chararcters所以你可以定义一个全面性协定部分,用于容纳值...

+0

那么我该如何申请我的处理程序? – 2012-02-09 12:49:04

+0

你必须改善你的网页代码与CDATA – Ajay 2012-02-09 12:56:49

+0

这篇文章是关于CDATA http://stackoverflow.com/questions/2784183/what-does-cdata-in-xml-mean – Ajay 2012-02-09 13:04:43

0

在你的榜样here看,它不能很好地形成。它包含未编码的'&'字符。

正确的解决方案是更改XML生成过程以获得格式良好的XML文件。

但是,在分析之前,您可以在整个文件中将所有“&”替换为“&”,然后尝试一种解决方法。

+0

所以请提供我的解决方案 – 2012-02-09 12:48:28

+0

你不能解析这个文件,因为它是。所以解决方案是改变你的XML生成。用实体替换特殊字符或将有问题的文本包含在CDATA部分中。 – 2012-02-09 13:45:33