解析xml ...我认为是探测器。是关于编码

时间:2013-06-11 06:25:24

标签: java android xml xml-parsing xmlpullparser

我正在制作一个Android应用程序。 它有一个XML解析器。 XML是我的api响应的类型 这是我将其下载到InputStream的方式:

private InputStream downloadUrl(String urlString) throws IOException {
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            String encoded;
            encoded = "Basic " + Base64.encodeToString("user:pass".getBytes(), 0);
            conn.setRequestProperty("Authorization", encoded);
            conn.setReadTimeout(10000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.connect();
            InputStream stream = conn.getInputStream();
            return stream;
        }

如果用户和传递正确,则XML的输出是:

<status>true</status>

如果不是:

<status>false</status>

和解析器类是:

private static final String ns = null;

    public Boolean parse(InputStream in) throws XmlPullParserException, IOException {
        try {
            XmlPullParser parser = Xml.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(in, null);
            parser.nextTag();
            return readFeed(parser);
        } finally {
            in.close();
        }
    }
    private Boolean readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {

        parser.require(XmlPullParser.START_TAG, ns, "verify_account");
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String name = parser.getName();
            if (name.equals("status")) {
                return readSta(parser);
            } else {
                skip(parser);
            }
        }
        return false;
    }
    private Boolean readSta(XmlPullParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlPullParser.START_TAG, ns, "stats");
        String name = readText(parser);
        parser.require(XmlPullParser.END_TAG, ns, "stats");
        if (name == "true"){
            return true;
        }
        else {
            return false;
        }
    }
    private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
        String result = "";
        if (parser.next() == XmlPullParser.TEXT) {
            result = parser.getText();
            parser.nextTag();
        }
        return result;
    }

问题是类PareXml总是返回false:| 但是我打印了标签的值,它是“真的” 我尝试在readSta功能行4中的“true”之前和之后添加空格 但它不起作用:| 。它似乎是一个编码问题

我尝试过很多东西,但它仍然无效:|

1 个答案:

答案 0 :(得分:1)

在readSta方法中,而不是使用:

if (name == "true"){
            return true;
        }

使用:

if (name.equals("true")){
            return true;
        }

尝试一次。