Я звоню RESTFUL API. Я использую библиотеки весны. Но я получаю этот OutOfMemoryError, когда выполняется restTemplate.exchange. Ниже приведен фрагмент кода и журнал ошибок. Я использую этот код для получения данных с сервера с помощью webservices. На некоторых устройствах это работает отлично, но несколько устройств вызывают исключение.ошибка android из памяти
FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter();
formHttpMessageConverter.setCharset(Charset.forName("UTF8"));
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
restTemplate.getMessageConverters().add(formHttpMessageConverter);
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
DeviceInfo deviceInfo = new DeviceInfo(mContext);
map.add("organizationId", "0");
map.add("groupCode", securityCode);
map.add("deviceId", deviceInfo.getDeviceID());
map.add("version_code", deviceInfo.getVersionCode() + "");
map.add("freshDataLoad", mode);
HttpHeaders headers = new HttpHeaders();
HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<MultiValueMap<String, String>>(map, headers);
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
String respStr = responseEntity.getBody();
Ниже журнал ошибок
java.lang.OutOfMemoryError
at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:124)
at java.lang.StringBuffer.append(StringBuffer.java:278)
at java.io.StringWriter.write(StringWriter.java:123)
at org.springframework.util.FileCopyUtils.copy(FileCopyUtils.java:189)
at org.springframework.util.FileCopyUtils.copyToString(FileCopyUtils.java:240)
at org.springframework.http.converter.StringHttpMessageConverter.readInternal(StringHttpMessageConverter.java:107)
at org.springframework.http.converter.StringHttpMessageConverter.readInternal(StringHttpMessageConverter.java:44)
at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:147)
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:98)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:743)
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:728)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:549)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:504)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:452)
at com.example.testapp.sync.SyncStrategy.getTestData(SyncStrategy.java:
at com.example.testapp.sync.SyncWorker$2.run(SyncWorker.java:126)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)
Каковы различия в спецификации памяти. между устройствами, где он работает, и другими, где нет? Для jvm может потребоваться расширение памяти. –
Возможно, ответ слишком велик. Попробуйте загрузить данные по частям или использовать потоки. – user1516873
На вкладке micromax он отлично работает, но на вкладке samsung он выдает ошибку, и на вкладках есть 1 ГБ оперативной памяти и 1,3 ГГц процессор – user3500873