Проблема с использованием SAXParser, чтобы получить список строк для arraylist - PullRequest
1 голос
/ 22 июня 2010

Я пытаюсь проанализировать ответ веб-службы с помощью SAXParser и получить определенные значения, сохранить их в массиве списков, а затем отобразить их в виде списка.

Пример XML, возвращаемого из веб-службы:

<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;
  }

         }
}

А вот мой метод, вызывающий и извлекающий мой веб-сервис:

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)

1 Ответ

1 голос
/ 22 июня 2010

Не похоже, что вы выделили экземпляр alist, как в

alist = new ArrayList<String>();
...