В моем приложении я превращаю изображение в строку 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\"}]}");
прекрасно работает
Любые идеи будут высоко оценили
имеют хорошую связь для InputStreamEntity? – KBusc
И любая идея, как это изменит мой конец? Есть ли что-то, что мне нужно будет изменить там также – KBusc
Почему вы не используете FileEntity? Изображения могут быть очень большими, при преобразовании изображения в json вы должны делать это потоковым способом и сохранять результаты в файле, не загружать все данные в память, иначе ошибка OOM будет появляться время от времени в самые неожиданные моменты. – marcinj