使用RoboSpice的OkHttpBitmapSpiceManager从URL加载图像时出现NoClassDefFoundError

时间:2013-11-10 20:37:00

标签: android asynchronous noclassdeffounderror robospice

我正在创建一个使用RoboSpice进行异步网络调用的Android应用程序。虽然我没有RoboSpice的经验,但我选择了RoboSpice,因为它被认为是互联网上最好的之一,因为它可以自动将JSON转换为POJO。不幸的是,RoboSpice的文档质量有点差。因此我的问题是:

我已成功使用RoboSpice对REST GET方法进行网络调用,自动将JSON解析为POJO并在Android ViewPager中显示检索到的对象列表。我正在使用 Jackson2GoogleHttpClientSpiceService 来执行此操作。现在,在这个ViewPager中,我也在显示一个图像。显然,我想使用RoboSpice下载此图像。我使用RoboSpice examples中的一个(使用OkHttpBitmapSpiceManager下载图像)作为指南,并根据我已将此行添加到我的活动中:

private OkHttpBitmapSpiceManager spiceManagerBinary = new OkHttpBitmapSpiceManager();

另外,我已将此行添加到清单中:

<service
        android:name="com.octo.android.robospice.spicelist.okhttp.OkHttpBitmapSpiceService"
        android:exported="false" />

现在,因为我没有在我的Android项目中使用maven,所以我必须在我的项目中添加以下jar: robospice-ui-spicelist-1.4.9.jar (我是显然添加了所有其他必要的jar用于使用 Jackson2GoogleHttpClientSpiceService ,这是有效的。

问题是,应用程序甚至无法启动。每当我删除(或评论)包含new OkHttpBitmapSpiceManager()的行时,应用程序都能正常运行。所以显然调用构造函数是导致应用程序崩溃的原因。我从logcat中得到以下错误:

java.lang.NoClassDefFoundError: com.octo.android.robospice.spicelist.okhttp.OkHttpBitmapSpiceService

对我来说,这个错误似乎与丢失的罐子有关。但是我根据文档添加了所有必要的jar。有RoboSpice经验的人可以向我解释我在这里做错了什么吗?我应该添加更多jar还是我错过了其他的东西?或者我应该使用完全不同的方法使用RoboSpice从URL加载图像?


修改<!/强>

为了更清楚,我已将以下jar添加到我的libs文件夹和构建路径中:

  • commons-io-1.3.2.jar
  • 公地lang3-3.1.jar
  • 谷歌-HTTP-客户1.17.0-rc.jar
  • 谷歌-HTTP-客户机器人-1.17.0-rc.jar
  • google-http-client-jackson2-1.17.0-rc.jar
  • 番石榴jdk5-13.0.jar
  • jackson-core-2.1.3.jar
  • jsr305-1.3.9.jar
  • robospice-1.4.9.jar
  • robospice-cache-1.4.9.jar
  • robospice-谷歌-HTTP-客户1.4.9.jar
  • robospice-UI-spicelist-1.4.9.jar

1 个答案:

答案 0 :(得分:2)

问题是您没有使用包含服务类的jar:com.octo.android.robospice.spicelist.okhttp.OkHttpBitmapSpiceService

它不包含在robospice-ui-spice-list中,而是包含在robospice-okhttp中。如果您包含此jar,您将获得所需的服务。

查看this sample

另外,请不要下载图像,使用非okhttp相关类可能更容易。 RS在its core package中提供简单的二进制请求。

哦,顺便说一下,当你说“RS docs有点差”时,请现在通过github或邮件列表告诉我们你希望看到它更完整。我们也接受拉取请求,甚至只接受文档。