- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在学习 Android 编程,当我尝试解析 XML 时,出现以下错误(程序运行正常,但仅解析第一个 XML 链接):
这是我的代码:
public class RSSActivity extends AppCompatActivity {
/**
* List of feeds that has been fetched.
*/
public static ArrayList<RSSFeed> Feeds;
/**
* Button for Seattle Times
*/
private Button mSeattleBtn;
/**
* Button for ESPN
*/
private Button mESPNBtn;
/**
* The layout contains the loading image
*/
private RelativeLayout mProgress;
/**
* {@inheritDoc}
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rss);
Feeds = new ArrayList<>();
mProgress = (RelativeLayout) findViewById(R.id.loading);
mProgress.setVisibility(View.GONE);
mSeattleBtn = (Button) findViewById(R.id.seattle_times);
mSeattleBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new DownloadXML().execute("http://www.seattletimes.com/feed/",
"http://www.seattletimes.com/seattle-news/feed/",
"http://www.seattletimes.com/nation-world/feed/");
}
});
mESPNBtn = (Button) findViewById(R.id.espn_btn);
mESPNBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new DownloadXML().execute("http://sports.espn.go.com/espn/rss/news",
"http://sports.espn.go.com/espn/rss/nfl/news",
"http://sports.espn.go.com/espn/rss/nba/news");
}
});
}
/**
* Async task to fetch the XML from the internet
*/
private class DownloadXML extends AsyncTask<String, Void, String> {
/**
* The name of the current class, used for Log (debugging)
*/
private static final String TAG = "DownloadXML";
/**
* The content of the xml that has been fetched from the internet
*/
private String xmlContent;
@Override
protected void onPreExecute() {
super.onPreExecute();
xmlContent = "";
mSeattleBtn.setVisibility(View.GONE);
mESPNBtn.setVisibility(View.GONE);
mProgress.setVisibility(View.VISIBLE);
}
/**
* {@inheritDoc}
*/
@Override
protected String doInBackground(String... params) {
// set the xml contents to xmlContent
//xmlContent = getXMLContent(params[0]);
for (String s: params) {
xmlContent += getXMLContent(s);
}
// This will return the xmlContent to the onPostExecute method.
return xmlContent;
}
/**
* Perform the actual downloading process of the RSS
* file here.
*
* @param path the url path of the rss feed.
* @return the completed download xml file (converted to String)
*/
private String getXMLContent(String path) {
StringBuilder temp = new StringBuilder();
try {
// Open the connection
URL url = new URL(path);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
InputStream inputStream = con.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
int charToRead;
// reading 1000 bytes at a time.
char[] input = new char[1000];
// Keep reading the file until there's no more bytes(chars) left to read
while(true) {
charToRead = inputStreamReader.read(input);
if(charToRead <= 0) {
break;
}
temp.append(String.copyValueOf(input, 0, charToRead));
}
return temp.toString();
} catch (IOException e) {
Log.d(TAG, "Error: " + e.getMessage());
}
return null;
}
/**
* {@inheritDoc}
*/
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
RSSFeed curFeed = null;
boolean inItem = false;
String value = "";
try {
// Instantiate XmlPullParser
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// specify that the code will be supported by XML namespaces
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(new StringReader(result));
int event = parser.getEventType();
// Parse the XML content
while(event != XmlPullParser.END_DOCUMENT) {
String tag = parser.getName();
// Only parse with the starting and ending tag of "item"
// and every tags inside it, ignore other tags.
switch(event) {
case XmlPullParser.START_TAG:
// if the begin tag is item which mean
// we can begin to to fetch the xml tags we want into our application
if(tag.equalsIgnoreCase("item")) {
inItem = true;
curFeed = new RSSFeed();
}
break;
case XmlPullParser.TEXT:
value = parser.getText();
break;
case XmlPullParser.END_TAG:
/*
while reach the end tag of the current tag
if the end tag is title then set it to the current feed title,
if the end tag is link then set it to the current feed link,
if the end tag is pubdate then set it to the current feed pubdate,
if the end tag is item we know that there's no more contents to add
to the current feed so we move on to parse another feed.
*/
if(inItem){
if (tag.equalsIgnoreCase("title")) {
curFeed.setTitle(value);
} else if (tag.equalsIgnoreCase("link")) {
curFeed.setLink(value);
} else if (tag.equalsIgnoreCase("pubdate")) {
curFeed.setDate(value);
} else if (tag.equalsIgnoreCase("item")) {
Feeds.add(curFeed);
inItem = false;
}
}
break;
default:
}
event = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
findViewById(R.id.loading).setVisibility(View.GONE);
Intent intent = new Intent(RSSActivity.this, FeedListActivity.class);
startActivity(intent);
finish();
}
}
}
由于我对所有这些都是新手,有人可以向我解释一下这是怎么回事吗?看起来错误来自解析器。
编辑:如果我只将一个参数传递给 Asynctask.execute() 那么一切都会正常运行。
解决方案:
现在唯一的解决方案是按 nikhil.thakkar 回复的顺序处理每个 URL
Then i would suggest you to process each url serially..
最佳答案
请检查 onPostExecute 方法。您正在访问 XML 文件中不存在的 token 。
关于java - 在 Android 中解析 XML (XmlPullParserException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33405735/
该应用程序在使用支持库 v23.1.1 插件并在 Android 4.4.4 (API 19) 下运行时运行良好: compile 'com.android.support:appcompat-v7:
我正在尝试从我的 android 项目中的 jar 文件中读取可绘制的 xml 文件。 private Drawable readDrawableFromJar(String p_strFilePat
我正在尝试使用 XStream。我已将 XStream 可执行 Jar 文件添加到我的项目中。执行以下命令: XStream xstream = new XStream(); 导致以下异常:
我在尝试使用 kSOAP2 在 Android 中使用 ColdFusion SOAP 服务时遇到了一个问题。这是我的 java 代码,用于调用我在 ColdFusion 中编写的测试方法(它只返回一
我有以下内容: public String searchRecipes( String searchString, int pageNumber ) throws Exception {
我在使用 web 服务的 android 中遇到这个错误。 当我运行 android webservice 并运行 android 项目时会发生这种情况 那么这里有什么问题呢? 请问有人知道吗? 谢谢
昨天我有一个用户给我发邮件说我的应用程序有问题,所以我开始和他一起调试并让他把电话日志发给我,当他收到一个 XmlPullParserError 时调用服务器 E/Message Exchange::
我在遗留 JavaME 项目上使用 kXML2。我收到一个 XML,其中一些属性包含编码的实体。当我通过调用检索该属性值时: parser.getAttributeValue 它抛出一个异常: Xml
我正在尝试测试一些开源 android 应用程序,但我无法构建它。 Gradle 构建不断失败并显示消息:[...] Unable to merge dex 我已经尝试了其他 SO 问题的所有建议,但
我正在尝试将 xml 文件(作为 byte[])绑定(bind)到 java 对象。这是我的代码- public voidinputConfigXML(String xmlfile, byte[] x
我正在尝试解析资源文件夹中的 XML 文件。这就是我想要做的 - public void loadXMLtoDB() { Resources resource = mContext.getRe
我的问题是我必须像这样解析 HTML 数据 84 101 some textHere comes a table definition 并且 XmlPullParserException 在以下情况下
这是我为 php (Yii) web 服务调用创建的 WSDL 以连接到 android。但是我明白了 10-19 11:17:36.068: W/System.err(11165): org.xml
我正在尝试解析一个类似于 res 文件夹下的 string.xml 文件的 xml 文件。但在解析时我遇到了异常。 下面是我的 xml 文件。 No corporate email
我目前正在学习 Android 编程,当我尝试解析 XML 时,出现以下错误(程序运行正常,但仅解析第一个 XML 链接): 这是我的代码: public class RSSActivity exte
我是在 android 上使用 KSOAP2 的新手,我遇到了问题 我看过关于同一问题的类似帖子,但没有人帮助我解决错误 我正在尝试连接到返回我登录时使用的用户名的网络服务 (WSDL)。当我在任何浏
将 robolectric 添加到 build.gradle 文件后出现错误 Program type already present: org.xmlpull.v1.XmlPullParserExc
我在使用自定义属性时遇到了问题。请帮助.. 我在 attr.xml 中定义了自定义属性 我有一个主题 @drawable/fav_icon @drawable/not_fav_ico
我正在使用 NDK 支持并收到此错误: 分级: 分布:gradle-2.5-all 构建工具:gradle-experimental:0.2.1 XML: 警告: vector requ
我正在拼命寻找 KSOAP2-Android 中此 XmlPullParserException 的原因。这是代码: String NAMESPACE = "urn:sap-c
我是一名优秀的程序员,十分优秀!