【问题标题】:Parsing an XML file in the sdcard - comes up with null pointer exception解析 sdcard 中的 XML 文件 - 出现空指针异常
【发布时间】:2012-07-10 06:09:05
【问题描述】:

我想要的只是解析一个本地 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) {
    }

现在我的意图是如果将相同的文件放在 sdcard 中,则让代码正常工作。 这是我的努力。

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) {
    }

使用此代码时出现空指针异常。帮我解决这个问题。

【问题讨论】:

  • 如果有两个同名文件,是否要检查文件名?是吗?
  • 我在 sdcard 中有一个名称完全相同的文件。 (路径和名称正确)
  • 粘贴代码中的哪一行引发 NullPointerException?
  • if (iter == 1) { if (elemtext.equals("edition")) { edition1.setText(xpp.getText());此行抛出异常

标签: android xml-parsing xmlpullparser


【解决方案1】:

【讨论】:

  • 这个链接让我无处可去。请检查链接。
  • @Sean_22 尝试在您的答案中添加更多详细信息;即使提供的链接将来停止工作,这也会有所帮助。
【解决方案2】:

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

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

【讨论】:

  • 我在我的代码中试过这个。我摆脱了空指针异常。但 XML 没有被解析
  • @StephenSherbatsky:你检查 xpp 对象吗?如果它是空的,你应该检查你的地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2012-11-04
  • 2014-01-18
  • 1970-01-01
相关资源
最近更新 更多