0

В моем приложении я превращаю изображение в строку bas64 и добавляю его в объект JSON для отправки на сервер. Проблема в том, что строка слишком велика? Первоначально я получал ошибку из памяти, теперь ответ возвращает null, а Ive отлаживает его до такой степени, что я обнаружил, что строка, переданная в мой объект StringEntity, слишком велика. Я читал много других ответов, но никто не работал, или они просто не совсем применимы к тому, что мне нужно делать. Кодекс состоит в следующемJSON String слишком большой для StringEntity

@Override 
    protected String doInBackground(JSONArray... params) { 

     JSONObject allPostObj = new JSONObject(); 
     try { 

      allPostObj.put("receiptImgs", params[0]); 

      //Log.e("in obj Try" , allPostObj.toString()); 

      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      // WCF service path 
      HttpPost httpPost = new HttpPost("http://localhost/path"); 
      HttpParams httpParameters = new BasicHttpParams(); 
      // Set the timeout in milliseconds until a connection is established. 
      // The default value is zero, that means the timeout is not used. 
      int timeoutConnection = 10000; 
      HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
      // Set the default socket timeout (SO_TIMEOUT) 
      // in milliseconds which is the timeout for waiting for data. 
      int timeoutSocket = 10000; 
      HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
      httpPost.setParams(httpParameters); 
      StringEntity se = new StringEntity(allPostObj.toString()); 
      Log.e("DEBUGGING",allPostObj.toString()); 
      se.setContentType("application/json;charset=UTF-8");     
      httpPost.setEntity(se); 

      HttpResponse httpResponse = httpClient.execute(httpPost);   
      HttpEntity httpEntity = httpResponse.getEntity(); 

      BufferedReader reader = new BufferedReader(new InputStreamReader(httpEntity.getContent())); 
      String readLine = reader.readLine(); 
      Log.d("DEBUG RESPONSE",readLine); 
      JSONObject jsonResponse = new JSONObject(readLine); 

      answer = jsonResponse.getString("saveImageResult"); 
      Log.e("returning", answer); 
     } 

и замена линии

StringEntity se = new StringEntity(allPostObj.toString()); 

С:

StringEntity se = new StringEntity("{\"receiptImgs\":[{\"imgString\":\"\",\"imgPath\":\"test\"}]}"); 

прекрасно работает

Любые идеи будут высоко оценили

ответ

1

вас Shou ld не использовать StringEntity для большого содержимого, вы должны переключиться на FileEntity или InputStreamEntity, в зависимости от того, где вы храните свои данные.


быстро исправить, вы можете попробовать (не компилируется/тестировался):

InputStream stream = new ByteArrayInputStream(allPostObj.toString().getBytes("UTF-8")); 
InputStreamEntity entity = new InputStreamEntity(stream , -1); 
+0

имеют хорошую связь для InputStreamEntity? – KBusc

+0

И любая идея, как это изменит мой конец? Есть ли что-то, что мне нужно будет изменить там также – KBusc

+0

Почему вы не используете FileEntity? Изображения могут быть очень большими, при преобразовании изображения в json вы должны делать это потоковым способом и сохранять результаты в файле, не загружать все данные в память, иначе ошибка OOM будет появляться время от времени в самые неожиданные моменты. – marcinj

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