Java RSS意外标记,正在xml文件中读取
我正在尝试创建一个RSS阅读器,它读取RSS提要并在列表视图中显示它。我让他与其他RSS源一起工作,但我无法让它与我实际需要的RSS源一起工作。我验证了这个提要,它说它是一个有效的RSS提要,没有错误。我知道问题/解决方案在getDomFromXMLString方法中,它实际上就是从这个方法中提取XML的,但是我不知道如何使它正确地读取它 这是我的主要活动Java RSS意外标记,正在xml文件中读取,java,android,domdocument,rss-reader,Java,Android,Domdocument,Rss Reader,我正在尝试创建一个RSS阅读器,它读取RSS提要并在列表视图中显示它。我让他与其他RSS源一起工作,但我无法让它与我实际需要的RSS源一起工作。我验证了这个提要,它说它是一个有效的RSS提要,没有错误。我知道问题/解决方案在getDomFromXMLString方法中,它实际上就是从这个方法中提取XML的,但是我不知道如何使它正确地读取它 这是我的主要活动 package com.example.lehi.events; import java.util.ArrayList; import j
package com.example.lehi.events;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
String key_items = "item";
String key_title = "title";
String key_description = "description";
String key_link = "link";
String key_date = "pubDate";
ListView lstPost = null;
List<HashMap<String, Object>> post_lists = new ArrayList<HashMap<String, Object>>();
List<String> lists = new ArrayList<String>();
ArrayAdapter<String> adapter = null;
RSSReader rssfeed = new RSSReader();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lstPost = (ListView) findViewById(R.id.lstPosts);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_2, android.R.id.text1, lists) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView txt1 = (TextView) view
.findViewById(android.R.id.text1);
TextView txt2 = (TextView) view
.findViewById(android.R.id.text2);
HashMap<String, Object> data = post_lists.get(position);
txt1.setText(data.get(key_title).toString());
txt2.setText(data.get(key_description).toString());
return view;
}
};
Document xmlFeed;
xmlFeed = rssfeed.getRSSFromServer("http://calendar.byui.edu/RSSFeeds.aspx?data=hhAbVFpDFO7OxcTcYlM9Lk3inbX%2bJ%2baS3fubTE468TQI91kccS33vQ%3d%3d");
NodeList nodes = xmlFeed.getElementsByTagName("item");
for (int i = 0; i < nodes.getLength(); i++) {
Element item = (Element) nodes.item(i);
HashMap<String, Object> feed = new HashMap<String, Object>();
feed.put(key_title, rssfeed.getValue(item, key_title));
feed.put(key_description, rssfeed.getValue(item, key_description));
feed.put(key_link, rssfeed.getValue(item, key_link));
feed.put(key_date, rssfeed.getValue(item, key_date));
post_lists.add(feed);
lists.add(feed.get(key_title).toString());
}
lstPost.setAdapter(adapter);
}
}
这是org.xml.sax.SAXParseException:Unexpected-token-position:TEXTï»?@1:4在java.io中。StringReader@19916b6d我想弄清楚
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ org.xml.sax.SAXParseException: Unexpected token (position:TEXT @1:4 in java.io.StringReader@19916b6d)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at com.example.lehi.events.RSSReader.getDomFromXMLString(RSSReader.java:58)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at com.example.lehi.events.RSSReader.getRSSFromServer(RSSReader.java:29)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at com.example.lehi.events.MainActivity.onCreate(MainActivity.java:56)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5933)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:144)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5221)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
03-15 18:29:08.308 3612-3612/com.example.lehi.events W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-15 18:29:08.308 3612-3612/com.example.lehi.events W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
如果getDomFromXMLString中存在异常,请尝试打印堆栈跟踪。我猜有一个异常,当前正在被吞并,然后返回的文档是空的
编辑:现在我们看到SAXParseException:意外的标记»。这就是UTF-8字节顺序标记。尝试EntityUtils.ToStringttpEntity,UTF-8,看看这是否有助于它吞下BOM。看起来“xmlFeed”是空的。你知道为什么这适用于某些RSS源,但不适用于此特定RSS源吗?似乎此源是带有BOM的UTF-8,而其他源可能是简单的ASCII。
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ org.xml.sax.SAXParseException: Unexpected token (position:TEXT @1:4 in java.io.StringReader@19916b6d)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at com.example.lehi.events.RSSReader.getDomFromXMLString(RSSReader.java:58)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at com.example.lehi.events.RSSReader.getRSSFromServer(RSSReader.java:29)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at com.example.lehi.events.MainActivity.onCreate(MainActivity.java:56)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5933)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:144)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5221)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
03-15 18:29:08.307 3612-3612/com.example.lehi.events W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
03-15 18:29:08.308 3612-3612/com.example.lehi.events W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-15 18:29:08.308 3612-3612/com.example.lehi.events W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)