gpt4 book ai didi

java - xmlreader 不运行 startelement 方法

转载 作者:行者123 更新时间:2023-11-29 03:45:14 27 4
gpt4 key购买 nike

我对 xmlreader 有疑问。我可以运行它并且 url 是正确的但它没有运行 startelement 方法。返回的所有值为空。我想知道为什么会发生这种情况以及解决方案。谢谢!

package com.headfirstlabs.nasadailyimage;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.jar.Attributes;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.StrictMode;

public class IotdHandler extends DefaultHandler {
private String url = "http://www.nasa.gov/rss/image_of_the_day.rss";
private boolean inUrl = false;
private boolean inTitle = false;
private boolean inDescription = false;
private boolean inItem = false;
private boolean inDate = false;
private Bitmap image = null;
private String title = null;
private StringBuffer description = new StringBuffer();
private String date = null;

public void processFeed() {
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);
SAXParserFactory factory =
SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
reader.setContentHandler(this);
InputStream inputStream = new URL(url).openStream();
reader.parse(new InputSource(inputStream));
}
catch(UnknownHostException e)
{
title="UnknownHostException";
}
catch(IOException e)
{
title="IOException";
}
catch(SAXException e)
{
title="SAXException";
}
catch (Exception e) {

title="Exception";
System.out.println(e);
}
}

private Bitmap getBitmap(String url) {
try {
HttpURLConnection connection =
(HttpURLConnection)new URL(url).openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(input);
input.close();
return bitmap;
} catch (IOException ioe) { return null; }
}

public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (localName.equals("url")) { inUrl = true; }
else { inUrl = false; }
if (localName.startsWith("item")) { inItem = true; }
else if (inItem) {
if (localName.equals("title")) { inTitle = true; }
else { inTitle = false; }
if (localName.equals("description")) { inDescription = true; }
else { inDescription = false; }
if (localName.equals("pubDate")) { inDate = true; }
else { inDate = false; }
}
}

public void characters(char ch[], int start, int length) {
String chars = new String(ch).substring(start, start + length);
if (inUrl && url == null) { image = getBitmap(chars); }
if (inTitle && title == null) { title = chars; }
if (inDescription) { description.append(chars); }
if (inDate && date == null) { date = chars; }
}


public Bitmap getImage() { return image; }
public String getTitle() { return title; }
public StringBuffer getDescription() { return description; }
public String getDate() { return date; }
}

最佳答案

问题出在这一行:

import java.util.jar.Attributes;

应该是

import org.xml.sax.Attributes;

因为 startElement 的第四个参数的类型错误,所以您的方法没有覆盖 DefaultHandler 中的 startElement,并且因此 DefaultHandlerstartElement 的默认实现被调用而不是您的方法。

您可以使用 @Override 注释来指示方法应该覆盖父类(super class)中的方法。如果带有 @Override 注释的方法没有覆盖父类(super class)方法,您将得到一个编译器错误。事实上,如果将此注释放在 startElement 方法上,就会出现这样的错误。

关于java - xmlreader 不运行 startelement 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11280645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com