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

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

现在我的 Intent 是让代码在 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) {
    }

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

最佳答案

关于android - 解析 sdcard 中的 XML 文件 - 出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407566/

相关文章:

android - 如何根据位图的 alpha 值在 Canvas 上绘制位图?

bash 使用 xpath 解析 XHTML

ios - CData 未使用 NSXmlparser 进行解析

xml - 为什么我的 XSLT 样式突然停止解析产品广告 API XML 响应?

java - 安卓 KXmlParser "NoSuchMethodError: java.lang.System.arraycopy([CI[CII)V"

安卓|每天同一时间设置闹钟 |不工作

ExpandableListView 的 android notifyDataSetChanged 不工作

android - java.lang.OutOfMemoryError : android. support.v4.app.BackStackState[] 长度为 1279544898 会溢出

java - 解析 xml ...我认为这个问题。是关于编码的

java - 让 XmlPullParser 忽略空格?