Android xmlparsing并将数据放入listview

时间:2012-05-14 07:01:00

标签: android listview xml-parsing

我有两个活动类的android。主活动类包含xml解析,我试图将从那里获取的数据传递给另一个活动类,该活动类将把它放入所有数据的列表视图中。在xml解析主要活动下面的问题是,当我运行程序时它显示nullpointer异常。我被困在这里任何人都可以帮助我在哪里是错误。 Thnx提前

enter code here





/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // setContentView(R.layout.main);

    try {
        stringXmlContent = getEventsFromAnXML(this);
        Intent i=new Intent(LocationSidActivity.this,FacebookData.class);
        i.putStringArrayListExtra("language", stringXmlContent);
        startActivity(i);
        // myXmlContent.setText(stringXmlContent);
    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }


private ArrayList<String> getEventsFromAnXML(Activity activity)
        throws XmlPullParserException, IOException {
    ArrayList<String> al = new ArrayList<String>();
    Resources res = activity.getResources();
    XmlResourceParser xpp = res.getXml(R.xml.myxml);
    xpp.next();
    int eventType = xpp.getEventType();

    while (eventType != XmlPullParser.END_DOCUMENT) {
        if (eventType == XmlPullParser.START_DOCUMENT) {
            al.add(xpp.getName());
        } else if (eventType == XmlPullParser.START_TAG) {
            //if ((xpp.getName()).compareTo("id") != 0) {
                al.add(xpp.getName());
            //} else {
                //eventType = xpp.next();


        }

        else if (eventType == XmlPullParser.TEXT) {

            al.add(xpp.getText());
        }
        eventType = xpp.next();
    }
    return al;

}

}

1 个答案:

答案 0 :(得分:1)

解析器方法getEventsFromAnXML中的行:

if (eventType == XmlPullParser.START_DOCUMENT)
{
    al.add(xpp.getName());
}

可能会以NullPointerException结尾,因为还没有读取任何内容,并且 null 值将作为ArrayList的第一个成员添加。

API文档中的XmlPullParser.START_DOCUMENT

  

表明解析器位于文档的最开头   还没有读过。只能通过调用来观察此事件类型   第一次调用next(),nextToken或nextTag()之前的getEvent()。

此外,如果getEventsFromAnXML类中包含Activity方法,则应删除参数,只需使用 this 即可。共享Context绝不是一个好习惯,它最常会泄漏。