2010-06-21 56 views
1

我想解析一個使用SAXParser的Web服務響應,並獲得某些值,將它們存儲到一個數組列表中,然後將它們顯示在列表視圖中。問題使用SAXParser來獲取一個列表字符串列表

示例XML正在從Web服務返回:

<ArrayOfStrings> <string>value</string> <string>value</string> <string>value</string> </ArrayOfStrings>

這裏是我SAXHandler類:

public class SAXHandler extends DefaultHandler { 

private boolean outertag = false; 
private boolean mytag = false; 
ArrayList<String> alist; 



public ArrayList<String> getList(){ 
    return this.alist; 
} 

@Override 
public void startDocument() throws SAXException { 
     } 
@Override 
public void endDocument() throws SAXException{ 

} 


//@Override 
     public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { 
if (localName.equals("ArrayOfString")){ 
    this.outertag=true; 
}else if (localName.equals("string")){ 
    this.mytag=true; 
} 

     } 

@Override 
    public void characters(char ch[], int start, int length) { 
    if (this.mytag){ 
    String s = new String(ch, start, length); 
    alist.add(s); 
    } 

    } 


@Override 
     public void endElement(String namespaceURI, String localName, String qName) throws SAXException { 
    if (localName.equals("ArrayOfString")){ 
    this.outertag=false; 
    }else if (localName.equals("string")){ 
    this.mytag=false; 
    } 

     } 
} 

這是我的方法調用和returing我的web服務:

try{ 
    URL url = new URL("xxxxxxx"); 

    SAXParserFactory spf = SAXParserFactory.newInstance(); 
    SAXParser sp = spf.newSAXParser(); 
    XMLReader xr = sp.getXMLReader(); 
    SAXHandler SAXHandler = new SAXHandler(); 
    xr.setContentHandler(SAXHandler); 
    xr.parse(new InputSource(url.openStream())); 
    ArrayList<String> stateList = SAXHandler.getList(); 
    aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, stateList); 
    RESTlist.setAdapter(aa); 

我不斷收到一個例外,我做不知道爲什麼。任何人都可以幫我一把嗎?

的logcat:

06-21 20:10:47.901: ERROR/AndroidRuntime(472): Uncaught handler: thread main exiting due to uncaught exception 
06-21 20:10:47.950: ERROR/AndroidRuntime(472): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pa.passammain/com.pa.passammain.RESTtest}: java.lang.NullPointerException: println needs a message 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.os.Looper.loop(Looper.java:123) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at dalvik.system.NativeStart.main(Native Method) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472): Caused by: java.lang.NullPointerException: println needs a message 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.util.Log.println(Native Method) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.util.Log.e(Log.java:208) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at com.pa.passammain.RESTtest.onCreate(RESTtest.java:82) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
06-21 20:10:47.950: ERROR/AndroidRuntime(472):  ... 11 more 

編輯我的錯誤是如何顯示在我的try/catch我不會再得到一個例外,但只是一個空白屏幕後。這裏是我的logcat顯示的是:

06-21 20:22:00.330: WARN/System.err(542): java.lang.NullPointerException 
06-21 20:22:00.352: WARN/System.err(542):  at com.pa.passammain.SAXHandler.characters(SAXHandler.java:45) 
06-21 20:22:00.352: WARN/System.err(542):  at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:166) 
06-21 20:22:00.362: WARN/System.err(542):  at org.apache.harmony.xml.ExpatParser.append(Native Method) 
06-21 20:22:00.371: WARN/System.err(542):  at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:506) 
06-21 20:22:00.371: WARN/System.err(542):  at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:467) 
06-21 20:22:00.371: WARN/System.err(542):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:329) 
06-21 20:22:00.381: WARN/System.err(542):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:286) 
06-21 20:22:00.381: WARN/System.err(542):  at com.pa.passammain.RESTtest.onCreate(RESTtest.java:71) 
06-21 20:22:00.391: WARN/System.err(542):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
06-21 20:22:00.391: WARN/System.err(542):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
06-21 20:22:00.401: WARN/System.err(542):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
06-21 20:22:00.401: WARN/System.err(542):  at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
06-21 20:22:00.410: WARN/System.err(542):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
06-21 20:22:00.410: WARN/System.err(542):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-21 20:22:00.420: WARN/System.err(542):  at android.os.Looper.loop(Looper.java:123) 
06-21 20:22:00.420: WARN/System.err(542):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
06-21 20:22:00.420: WARN/System.err(542):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-21 20:22:00.430: WARN/System.err(542):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-21 20:22:00.430: WARN/System.err(542):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
06-21 20:22:00.442: WARN/System.err(542):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
06-21 20:22:00.442: WARN/System.err(542):  at dalvik.system.NativeStart.main(Native Method) 
+0

什麼是例外?另外,您應該編輯您的問題以正確格式化代碼,使其可讀。您應該能夠突出顯示您的代碼並點擊「代碼」按鈕。底部的預覽視圖顯示了它的外觀。 – 2010-06-21 20:08:11

+0

對不起,它在預覽中被分開了,我不知道它爲什麼不起作用。但編輯,修復和添加logcat響應。 – bschultz 2010-06-21 20:13:52

回答

1

它看起來並不像你分配的alist的實例,如在

alist = new ArrayList<String>(); 
+0

我在我的課堂上做過。我改變了我的錯誤顯示方式,現在我不再有異常,但只是一個空白的屏幕。發佈新的logcat響應 – bschultz 2010-06-21 20:26:14

+0

那麼哪一個是字符行45()。我的猜測是'alist.add(s)',alist在這裏是空的。 – 2010-06-22 15:34:44

相關問題