【问题标题】:How to use spring in Android Application?如何在 Android 应用程序中使用 spring?
【发布时间】:2014-04-04 22:59:19
【问题描述】:

我试图在我的android app 中使用spring 作为我的spring mvc REST 应用程序的客户端。我认为在我的 android 应用程序的 classpath 中输入正确的 jars 时遇到问题。我将罐子的图像放在我的 android 应用程序的 libs 文件夹中。我在 SO 上发现了许多相关问题。但他们都没有帮助我。这就是为什么我再次在这里问。

这是我如何调用从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

【问题讨论】:

    标签: android android-asynctask spring-android


    【解决方案1】:

    异常表明您缺少必需的 Jackson 依赖项。首先,我建议使用MappingJackson2HttpMessageConverter 而不是您配置的MappingJacksonHttpMessageConverter

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

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

    • jackson-databind-2.3.2.jar
    • jackson-annotations-2.3.2.jar
    • jackson-core-2.3.2.jar

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

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

    【讨论】:

    • 首先感谢您的回答,很抱歉回复晚了。我完全按照你说的做了,这 3 个罐子在我的类路径中。但我现在得到这个异常: 引起:java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering
    • 效果很好。这是我的错。我一直在使用错误的 jackson-core jar :)
    • 太棒了!感谢您的跟进。
    猜你喜欢
    • 1970-01-01
    • 2014-05-24
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2017-04-11
    • 2018-01-02
    • 2016-08-14
    相关资源
    最近更新 更多