異常信息是這樣的:
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()判斷相當的有用。