Как использовать весну в приложении для Android?

Я пытаюсь использовать spring в моем android app как клиент моего spring mvc REST приложение. Я думаю, что у меня есть проблема, чтобы исправить jars в classpath моего приложения для Android. Я поместил изображение банок в папку libs моего приложения для Android. Я нашел много связанных вопросов на SO. Но никто из них не помог мне. Вот почему я спрашиваю здесь снова.

Вот как я называю мой веб-сервис, на который ссылаются отсюда:

@Override
protected SowResult doInBackground(Void... params) {
    System.out.println("URLLLL : "+URL);
    RestTemplate rest = new RestTemplate();
    rest.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
    SowResult result = rest.getForObject(URL, SowResult.class);
    return result;
}

И исключение, которое я получаю:

FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
at java.lang.Thread.run(Thread.java:1096)
Caused by: java.lang.NoSuchMethodError: org.codehaus.jackson.map.ObjectMapper.getTypeFactory
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.getJavaType(MappingJacksonHttpMessageConverter.java:166)
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.canRead(MappingJacksonHttpMessageConverter.java:101)
at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.doWithRequest(RestTemplate.java:542)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:474)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:237)
at com.inovarge.shoponway.resttasks.UserRestTask.doInBackground(UserRestTask.java:30)
at com.inovarge.shoponway.resttasks.UserRestTask.doInBackground(UserRestTask.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
... 4 more

1 ответ

Решение

Исключение означает, что вы пропустили обязательную зависимость Джексона. Во-первых, я рекомендую использовать MappingJackson2HttpMessageConverter вместо MappingJacksonHttpMessageConverter который вы настроили:

rest.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

Следующий, MappingJackson2HttpMessageConverter зависит от библиотеки Jackson 2 для ее функциональности, которая требует, чтобы следующие файлы были в вашем classpath:

  • ДЖЕКСОН-DataBind-2.3.2.jar
  • ДЖЕКСОН-аннотаций-2.3.2.jar
  • ДЖЕКСОН-ядро-2.3.2.jar

У тебя уже есть jackson-databind-2.3.2.jar в вашем libs папку, поэтому вам нужно скачать две другие банки.

Наконец, я настоятельно рекомендую использовать систему управления зависимостями, такую ​​как плагин Gradle, в новой системе сборки Android. Он будет обрабатывать загрузку всех переходных зависимостей для вас, вместо того, чтобы делать это вручную.

Другие вопросы по тегам