DataOutputSteam给我一个’java.io.IOException:意外的流结束’?

前端之家收集整理的这篇文章主要介绍了DataOutputSteam给我一个’java.io.IOException:意外的流结束’?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用HttpUrlConnection从 Android应用程序发出请求到WebService.但有时候它有效,有时它不起作用.

当我尝试发送此值:

JSON值

  1. {"Calle":"Calle Pérez 105","DetalleDireccion":"","HoraPartida":"May 18,2014 9:17:10 AM","Numero":0,"PuntoPartidaLat":18.477295994621315,"PuntoPartidaLon":-69.93638522922993,"Sector":"Main Sector"}

我在DataOutputStream关闭函数中有一个“意外的流结束”异常.

这是我的代码

  1. DataOutputStream printout;
  2. // String json;
  3. byte[] bytes;
  4. DataInputStream input;
  5.  
  6. URL serverUrl = null;
  7. try {
  8. serverUrl = new URL(Config.APP_SERVER_URL + URL);
  9. } catch (MalformedURLException e) {
  10. ...
  11. }
  12.  
  13. bytes = json.getBytes();
  14. try {
  15.  
  16. httpCon = (HttpURLConnection) serverUrl.openConnection();
  17. httpCon.setDoOutput(true);
  18. httpCon.setUseCaches(false);
  19. httpCon.setFixedLengthStreamingMode(bytes.length);
  20. httpCon.setRequestProperty("Authorization",tokenType + " "+ accessToken);
  21. httpCon.setRequestMethod("POST");
  22. httpCon.setRequestProperty("Content-Type","application/json");
  23.  
  24. printout = new DataOutputStream(httpCon.getOutputStream());
  25. printout.writeBytes(json);
  26. printout.flush();
  27. printout.close();
  28. ...
  29. }

解决方法

以下是以下更改的解决方案:

它摆脱了DataOutputStream,这当然是错误的使用.
>它正确设置和传递内容长度.
>它不依赖于关于编码的任何默认值,而是在两个位置显式设置UTF-8.

尝试一下:

  1. // String json;
  2.  
  3. URL serverUrl = null;
  4. try {
  5. serverUrl = new URL(Config.APP_SERVER_URL + URL);
  6. } catch (MalformedURLException e) {
  7. ...
  8. }
  9.  
  10. try {
  11. byte[] bytes = json.getBytes("UTF-8");
  12.  
  13. httpCon = (HttpURLConnection) serverUrl.openConnection();
  14. httpCon.setDoOutput(true);
  15. httpCon.setUseCaches(false);
  16. httpCon.setFixedLengthStreamingMode(bytes.length);
  17. httpCon.setRequestProperty("Authorization","application/json; charset=UTF-8");
  18.  
  19. OutputStream os = httpCon.getOutputStream();
  20. os.write(bytes);
  21. os.close();
  22.  
  23. ...
  24. }

猜你在找的Java相关文章