android中XML文件解析遇到“not well-formed (invalid token)”解決辦法


異常信息是這樣的:

org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 501: not well-formed (invalid token)

我是調用一個webService原來解析返回的XML字符串,結果遇到了上面的異常。下面是調用webService的核心代碼:

 

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            HttpURLConnection conn = null;
            InputStream inputStream = null;
            try {
                URL url = new URL(baseUrl);
                conn = (HttpURLConnection)url.openConnection();
                conn.setConnectTimeout(10000);
                conn.setReadTimeout(8000);
                conn.setDoInput(true);
                conn.setRequestMethod("GET");
                conn.setRequestProperty("Content-Type", "text/html");
                conn.setRequestProperty("Accept-Charset", "utf-8");
                conn.setRequestProperty("contentType", "utf-8");
                inputStream = conn.getInputStream();
                byte[] buffer = null;
                if(conn.getResponseCode() == 200){
                    buffer = new byte[1024];
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                    int len;
                    while ((len = inputStream.read(buffer)) != -1)
                    {
                        out.write(buffer, 0, len); }
                    buffer = out.toByteArray();
                }
                mCallback.HandleAsync(buffer);
                SendMsg("value",buffer);
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("sjr","Network-error");
            }
            finally{
                try {
                    if(inputStream != null){
                        inputStream.close();
                    }
                    if(conn != null){
                        conn.disconnect();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    Log.e("sjr","InvokeWebServiceHelper類中釋放資源出錯");
                }
            }
        }
    };

原來是用了InputStreamReader直接一次讀完,也沒有用conn.getResponseCode() == 200,結果總是出現在這樣的異常。現在改成這種循環的方式讀從服務端返回的數據。這樣就解決了這個問題。因為自己不是搞java的,屬於半路出家型的。但從.net方面考慮的話,我想可能是當我用InputStreamReader讀這些流的時候,服務端還沒有完全將這些流寫回客戶端,網絡一旦出現不穩定就會出現在上面的異常。從這方面想,這個getResponseCode()判斷相當的有用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM