如何在Android应用程序中使用spring?

时间:2014-04-04 22:59:19

标签: android android-asynctask spring-android

我尝试在我的spring中使用android app作为spring mvc REST应用程序的客户端。我想在我的Android应用的jars中添加正确的classpath时遇到问题。我把jar的图像放在我的Android应用程序的libs文件夹中。我在SO上发现了很多相关的问题。但他们都没有帮助我。这就是我再次问这里的原因。

enter image description here

以下是我如何调用从here引用的网络服务:

@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 个答案:

答案 0 :(得分:1)

该异常表示您缺少必需的Jackson依赖项。首先,我建议使用MappingJackson2HttpMessageConverter代替您已配置的MappingJacksonHttpMessageConverter

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

接下来,MappingJackson2HttpMessageConverter依赖于Jackson 2库的功能,这需要在您的类路径中包含以下文件:

  • 杰克逊 - 数据绑定-2.3.2.jar
  • 杰克逊 - 注解-2.3.2.jar
  • 杰克逊 - 芯 - 2.3.2.jar

您的jackson-databind-2.3.2.jar文件夹中已有libs,因此您需要download其他两个广告柜。

最后,我强烈建议您使用依赖管理系统,例如Android New Build System中的Gradle插件。它将处理为您下载所有传递依赖项,而不必手动执行此操作。