2015-10-12 6 views
9

ich diesen FehlerWas ist der Grund für diesen Fehler java.io.IOException ist: Content-Length und Strom Länge nicht einverstanden

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

auf dieser Codezeile return response.body().bytes();

dies ist voll Code bin immer

edit: nach einigen google der Grund des Fehlers ist von okhttp lib

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

aber wie das zu beheben?

edit:

enter image description here

dies ist voll Code:

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 Ich habe es immer noch nicht überprüft Ich bin bei der Arbeit hoffentlich in der Nacht krank Test es. Vielen Dank – Moudiz

+0

@BNK Ich habe den folgenden Fehler. check edit image – Moudiz

+0

Einfach nur try-catch-Block hinzufügen. – BNK

Antwort

9

Diese Ausnahme ausgelöst, weil Sie InputStream inputStream = response.body().byteStream(); aufgerufen haben, dann wieder response.body().bytes(); genannt.

Sie können das Rückgabe-Array von inputStream oder return result.getBytes(); stattdessen verwenden, wenn dies das ist, was Sie zurückgeben möchten.

Von input-Bytes beziehen sich auf die folgenden:

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:

Wenn Sie bei ResponseBody.class debuggen, werden Sie als der folgende Screenshot sehen :

BNK's screenshot

0

Welche URL diese Antwort zurückgibt? Es ist ein Problem, dass der Server inkonsistente Daten meldet.

Verwandte Themen