在sdcard中解析XML文件 - 出现空指针异常

时间:2012-07-10 06:09:06

标签: android xml-parsing xmlpullparser

我想要的只是解析本地XML文件。将XML文件放在资源文件夹中时,代码可以正常工作。这是我的代码。

try {

        XmlResourceParser xpp = getResources().getXml(R.xml.catalog);
        xpp.next();
        int eventType = xpp.getEventType();
        int iter = 0;
        String elemtext = null;

        while (eventType != XmlPullParser.END_DOCUMENT) {

            if (eventType == XmlPullParser.START_TAG) {

                String elemName = xpp.getName();
                if (elemName.equals("catalog")) {
                    String journalAttr = xpp.getAttributeValue(null,
                            "journal");
                    String publisherAttr = xpp.getAttributeValue(null,
                            "publisher");
                    journal.setText(journalAttr);
                    publisher.setText(publisherAttr);
                }
                if (elemName.equals("article")) {
                    iter = iter + 1;
                }

                if (elemName.equals("edition")) {
                    elemtext = "edition";
                }
                if (elemName.equals("title")) {
                    elemtext = "title";
                }
                if (elemName.equals("author")) {
                    elemtext = "author";
                }
            }

            else if (eventType == XmlPullParser.TEXT) {
                if (iter == 1) {
                    if (elemtext.equals("edition")) {
                        edition1.setText(xpp.getText());
                    } else if (elemtext.equals("title")) {
                        title1.setText(xpp.getText());
                    } else if (elemtext.equals("author")) {
                        author1.setText(xpp.getText());
                    }
                }

                else if (iter == 2) {
                    if (elemtext.equals("edition")) {
                        edition2.setText(xpp.getText());
                    } else if (elemtext.equals("title")) {
                        title2.setText(xpp.getText());
                    } else if (elemtext.equals("author")) {
                        author2.setText(xpp.getText());
                    }

                }
            }
            eventType = xpp.next();
        }

    } catch (XmlPullParserException e) {
    } catch (IOException e) {
    }

现在我的目的是让代码工作,如果相同的文件放在SD卡中。 这是我的努力。

try {

        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();
        int eventType = xpp.getEventType();
        int iter = 0;
        String elemtext = null;
        // get a reference to the file.
        File file = new File(Environment.getExternalStorageDirectory()
                + "/newdir/catalog.xml");
        FileInputStream fis = new FileInputStream(file);

        xpp.setInput(new InputStreamReader(fis));

        while (eventType != XmlPullParser.END_DOCUMENT) {

            if (eventType == XmlPullParser.START_TAG) {

                String elemName = xpp.getName();
                if (elemName.equals("catalog")) {
                    String journalAttr = xpp.getAttributeValue(null,
                            "journal");
                    String publisherAttr = xpp.getAttributeValue(null,
                            "publisher");
                    journal.setText(journalAttr);
                    publisher.setText(publisherAttr);
                }
                if (elemName.equals("article")) {
                    iter = iter + 1;
                }

                if (elemName.equals("edition")) {
                    elemtext = "edition";
                }
                if (elemName.equals("title")) {
                    elemtext = "title";
                }
                if (elemName.equals("author")) {
                    elemtext = "author";
                }
            }

            else if (eventType == XmlPullParser.TEXT) {
                if (iter == 1) {
                    if (elemtext.equals("edition")) {
                        edition1.setText(xpp.getText());
                    } else if (elemtext.equals("title")) {
                        title1.setText(xpp.getText());
                    } else if (elemtext.equals("author")) {
                        author1.setText(xpp.getText());
                    }
                }

                else if (iter == 2) {
                    if (elemtext.equals("edition")) {
                        edition2.setText(xpp.getText());
                    } else if (elemtext.equals("title")) {
                        title2.setText(xpp.getText());
                    } else if (elemtext.equals("author")) {
                        author2.setText(xpp.getText());
                    }

                }
            }
            eventType = xpp.next();
        }

    } catch (XmlPullParserException e) {
    } catch (IOException e) {
    }

当我使用此代码时,我得到空指针异常。帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

我认为你没有正确解决。检查我的建议:

File root = android.os.Environment.getExternalStorageDirectory();
String a = root.getAbsolutePath() + "/newdir/catalog.xml";
FileInputStream fis = new FileInputStream(a);