2010-06-21 18 views
1

J'essaie d'analyser une réponse de service Web en utilisant SAXParser et d'obtenir certaines valeurs, les stocker dans une liste, puis les afficher dans une liste.Problème lors de l'utilisation de SAXParser pour obtenir une liste de chaînes pour une liste

XML Exemple retourné du service Web:

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

Voici ma classe 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; 
    } 

     } 
} 

Et voici mon appel de méthode et returing mon service 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); 

Je reçois toujours une exception et je fais Je ne sais pas pourquoi. Quelqu'un peut-il me donner un coup de main?

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 

Après avoir modifié la façon dont mon erreur est affiché dans mon try/catch je ne suis pas plus faire une exception, mais juste un écran vide. Voici ce que mon logcat affiche:

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

Quelle est l'exception? En outre, vous devriez éditer votre question pour formater correctement le code afin qu'il soit lisible. Vous devriez être capable de mettre en évidence votre code et d'appuyer sur le bouton "code". La vue d'aperçu en bas vous montre à quoi il ressemble. –

+0

Désolé, il a été sectionné dans l'aperçu, je ne sais pas pourquoi cela n'a pas fonctionné. Mais édité, corrigé, et ajouté la réponse de logcat. – bschultz

Répondre

1

Il ne ressemble pas à vous attribuer un exemple de alist, comme dans

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

Je l'ai fait au sommet de ma classe. J'ai changé comment mon erreur est affichée et maintenant je ne reçois plus d'exception, mais juste un écran vide. Publication d'une nouvelle réponse logcat – bschultz

+0

La ligne 45 en caractères(). Je suppose que c'est le 'alist.add (s)' et alist est nulle ici. –