我一直在学习 Tim Buchalka 在 Udemy 上开设的“学习 Android Lolipop 开发”类(class)。他用 Java 授课,但我认为用 groovy 授课会是一次很好的学习体验。话虽这么说,我已经到了他正在创建一个应用程序的地步,该应用程序可以从 Apple's Website 下载排名前 10 的免费应用程序 XML。
我编写的应用程序中用于下载 XML 的部分是:
public class XMLDownloader extends AsyncTask<Object, Void, String>{
String myXMLData
@Override
protected String doInBackground(Object... urls) {
try {
myXMLData = downloadXML((String) urls[0])
}
catch (IOException e) {
return "Unable to download XML file"
}
return ""
}
protected void onPostExecute(String result) {
Log.d("OnPostExecute", myXMLData)
}
String downloadXML(String url) throws IOException {
String xmlContents = ""
BufferedReader reader
try {
reader = new URL(url).openStream().newReader()
while (reader.any()) {
xmlContents += "${reader.readLine()}\n"
}
return xmlContents;
} catch (Exception e) {
e.printStackTrace()
return null
} finally {
reader?.close()
}
}
}
出于某种原因,它似乎没有下载完整的 XML。
protected void onPostExecute(String result) {
Log.d("OnPostExecute", myXMLData)
}
仅打印前 31 行。仅下载前 31 行就无法解析 XML。
使用XmlPullParser解析,得到
06-22 14:58:17.245 30926-30926/com.lategame.top10downloader W/System.err﹕ org.xmlpull.v1.XmlPullParserException: expected: /entry read: summary (position:END_TAG @17:54 in java.io.StringReader@158cb17f)
什么可能导致 XML 只下载部分内容?
另外,请忽略我正在使用 AsyncTask<Object, Void, String>
的事实并转换到 String
,而不是使用 AyncTask<String, Void, String>
。这是解决另一个问题的方法。
最佳答案
显然,罪魁祸首是 logcat 具有日志的最大长度。 它正在下载完整的 XML,但我无法全部注销。
关于android - 使用 Groovy 在 Android 上仅下载部分 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30987937/