2015-10-12 47 views
9

我在这行代码得到这个错误这是什么错误java.io.IOException异常的原因:内容长度和流长度不同意

java.io.IOException: Content-Length and stream length disagree 

return response.body().bytes();

这是完整的代码

编辑:后谷歌的一些错误的原因是从okhttp lib

if (contentLength != -1 && contentLength != bytes.length) { 
     throw new IOException("Content-Length and stream length disagree"); 
    } 

但如何解决这个问题?

编辑:

enter image description here

这是全码:

public class OkHttpHandler extends AsyncTask<Void, Void, byte[]> { 

    private final String Fetch_URL = "http://justedhak.comlu.com/get-data.php"; 
    ArrayList<Listitem> Listitem; 
    int resulta; 

    OkHttpClient httpClient = new OkHttpClient(); 

    String myJSON; 
    JSONArray peoples = null; 
    InputStream inputStream = null; 

    @Override 
    protected byte[] doInBackground(Void... params) { 
     Log.d("e", "dddddddddd"); 
     Log.d("e", Fetch_URL); 

     Request.Builder builder = new Request.Builder(); 
     builder.url(Fetch_URL); 

     Request request = builder.build(); 

     String result = null; 
     try { 

      Response response = httpClient.newCall(request).execute(); 
      // int statusCode = response.getStatusLine().getStatusCode(); 

       int statusCode =200; 

      // HttpEntity entity = response.body().byteStream(); 
      if (statusCode == 200) { 
       byte[] buffer = new byte[8192]; 
       int bytesRead; 
       ByteArrayOutputStream output = new ByteArrayOutputStream(); 
       while ((bytesRead = inputStream.read(buffer)) != -1) { 
        output.write(buffer, 0, bytesRead); 
      // inputStream = response.body().byteStream(); 

       // json is UTF-8 by default 
      // BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
      /* StringBuilder sb = new StringBuilder(); 

       String line = null; 
       while ((line = reader.readLine()) != null) 
       { 
        sb.append(line + "\n"); 
       } 
       result = sb.toString();*/ 
       resulta = 1; //"Success 
       Log.d("e", "response."); 
       return response.body().bytes(); 

      } 
      else 
      { 
       resulta = 0; //"Failed 

      } 
     } catch (Exception e) { 

      Log.d("e", "r2r2 error"); 

      e.printStackTrace();  } 
     finally { 
      try{if(inputStream != null)inputStream.close();}catch(Exception squish){} 
     } 
     return null; 
    } 

    protected void onPostExecute(String result){ 
     if(resulta ==1){ 
      myJSON=result; 
      showList(); 
     } 
     else{ 
      Log.e("d","zzzzzzzz"); 

     } 
    } 

    protected void showList(){ 
     try { 
      Log.e("d","jjjjjjjjjj"); 

      JSONObject jsonObj = new JSONObject(myJSON); 
      peoples = jsonObj.getJSONArray("result"); 
      Listitem = new ArrayList<Listitem>(); 
      for(int i=0;i<peoples.length();i++){ 
       JSONObject c = peoples.getJSONObject(i); 
       String id = c.getString("id"); 
       String url = c.getString("path"); 
       Listitem.add(new Listitem(id,url)); 
       Log.e("d","ppppp"); 
      } 

     // GridViewAdapter adapter = new GridViewAdapter(this, R.layout.grid_item_layout, Listitem); 
      // gridView.setAdapter(gridAdapter); 
      // adapter.notifyDataSetChanged(); 

      // list.setAdapter(adapter); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    } 
} 
+0

@BNK我还没有检查它我希望在晚上生病测试它。非常感谢你 – Moudiz

+0

@BNK我得到了以下错误。检查编辑图像 – Moudiz

+0

只需添加try-catch块。 – BNK

回答

9

异常抛出,因为你叫​​然后再叫response.body().bytes();

如果您想要返回,您可以使用inputStreamreturn result.getBytes();的返回字节数组。

的inputStream字节参阅以下内容:

public byte[] getBytesFromInputStream(InputStream inputStream) throws IOException { 
     try {    
      byte[] buffer = new byte[8192]; 
      int bytesRead; 
      ByteArrayOutputStream output = new ByteArrayOutputStream(); 
      while ((bytesRead = inputStream.read(buffer)) != -1) { 
       output.write(buffer, 0, bytesRead); 
      } 
      return output.toByteArray(); 
     } catch (OutOfMemoryError error) { 
      return null; 
     } 
    } 

UPDATE:

如果调试在ResponseBody.class,你会看到如下面的截图:

BNK's screenshot

0

什么网址传回对此有何反应?这是服务器报告不一致数据的问题。

相关问题