2013-08-26 2 views
0

У меня есть веб-сервис, возвращающий ответ json, ответ json содержит как текстовые, так и кодированные изображения base64, я использую эту службу, используя приложение Android, поэтому я реализовал индикатор выполнения, чтобы указать прогресс .Передача Base64 Строка через службу Http REST с ответом JSON

Выполнение строки выполнения заставляет меня использовать BufferedInputStream для чтения ответа и обновления прогресса на основе того, что приложение читает.

Проблема в том, что все работает нормально, и прогресс обновляется правильно, но после сбора ответа и выхода из цикла while я пытаюсь преобразовать строку в json-формат с помощью JSONObject. Вот фрагмент кода

BufferedInputStream bis = new BufferedInputStream(responseEntity.getContent()); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      int total = 0 ; 
      int count = 0 ; 
      byte[] buffer = new byte[4096]; 
      StringBuffer sBuffer = new StringBuffer(); 
      StringWriter sw = new StringWriter(); 
      String content = new String(); 

      while((count = bis.read(buffer)) > 0){ 
       content += new String(buffer,Charset.defaultCharset()); 

       total += count; 
       publishProgress(""+(int)total*100/this.contentSize); 
       Log.i("updating",""+(int)total*100/this.contentSize); 
      } 


      bis.close(); 
      // String content = new String(sb); 
      // Log.i("ServerRawresponse",content); 
      try { 
       Log.i("REsponse_Content",content.replaceAll("\"", "")); 
       responseString = new JSONObject(new JSONTokener(content.replaceAll("\"", "\\\""))); 
       //System.out.println(content); 
      } catch (JSONException e) { 
       e.printStackTrace(); 

      } 

Любая помощь, пожалуйста,

ответ

0

Попробуйте эти методы отлично работает со мной

HttpResponse WSresponse = httpclient.execute(httppost); 
String response = getResponseBody(WSresponse.getEntity()); 
JSONObject jobj = new JSONObject(response); 

public String getResponseBody(final HttpEntity entity) throws IOException, ParseException { 

     System.out.println("GEN START : " + Calendar.getInstance().getTimeInMillis()); 
     if (entity == null) { 
      throw new IllegalArgumentException("HTTP entity may not be null"); 
     } 

     InputStream instream = entity.getContent(); 

     if (instream == null) { 
      return ""; 
     } 

     if (entity.getContentLength() > Integer.MAX_VALUE) { 
      throw new IllegalArgumentException(

      "HTTP entity too large to be buffered in memory"); 
     } 


     StringBuilder buffer = new StringBuilder(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(instream, HTTP.UTF_8)); 

     String line = null; 
     try { 
      while ((line = reader.readLine()) != null) { 
       buffer.append(line); 
      } 

     } finally { 
      instream.close(); 
      reader.close(); 
     } 

     return buffer.toString(); 

    } 
+0

Спасибо !! На самом деле я пробовал htis раньше, но проблема в том, что этот код будет считать ответ в виде одной строки, поэтому прогресс будет идти от 0 до 100% напрямую –

Смежные вопросы