2015-06-22 58 views
0

我一直在通過Tim Buchalka在Udemy上的「學習Android Lolipop開發」課程。他用Java教授課程,但我認爲這是一個很好的學習經驗,而不是常規。話雖這麼說,我已經到了一個地步,他是創建下載從Apple's WebsiteXML僅在Groovy上的Android上部分下載

是下載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:預期:/entry read:summary(位置:END_TAG @ 17:54,位於[email protected]

什麼可能導致XML僅部分下載?

此外,無視我正在使用AsyncTask<Object, Void, String>並將其轉換爲String而不是使用AyncTask<String, Void, String>。這是解決整個其他問題的一種解決方法。

回答

0

顯然,罪魁禍首是logcat的具有原木一個最大長度。 這是下載完整的XML,我只是無法記錄全部。

0

你可以重寫downloadXml作爲

String downloadXML(String url) { 
    new URL(url).text 
} 
+0

哇,這簡單得多。它工作得更好,但它仍然只能打印41行。 logcat的最大長度是否會在一條消息中打印出來? – Fiberwire

+0

嘗試註銷字符串的'length()'? –

+0

你也可以嘗試調用'new XmlSlurper()。parse(url)',因爲它應該爲你處理流並返回一個[GPathResult](http://docs.groovy-lang.org/latest/html/ api/groovy/util/XmlSlurper.html#parse(java.lang.String)) –