Xamarin Android的OkHttp绑定库出现错误

3
我正在尝试在Xamarin Android应用程序中使用OkHttp-Xamarin库。每当我尝试创建一个新的OkHttpNetworkHandler时,我都会收到下面的异常。

代码行:

var handler = new OkHttpNetworkHandler();

异常信息:

[] Missing method Android.Runtime.JNIEnv::AllocObject(Type) in assembly Mono.Android.dll, referenced in assembly /data/data/com.my.app/files/.__override__/OkHttp.dll
[MonoDroid] UNHANDLED EXCEPTION: System.MissingMethodException: Method not found: 'Android.Runtime.JNIEnv.AllocObject'.
[MonoDroid] at ModernHttpClient.OkHttpNetworkHandler..ctor () <IL 0x00001, 0x00057>

我正在使用来自ModernHttpClient版本0.9的预编译二进制文件。我的最低Android版本设置为2.3,目标设置为4.2。我正在使用Xamarin Studio 4.0.13和Mono 3.2.3。

目前正遇到完全相同的问题,无法解决 :( - Aleksei Petrenko
2个回答

2

所以这看起来像是您调用绑定代码的第一次。

这里可能有几件事情:

  • 确保您使用的是EmbeddedJar而不是InputJar作为jar文件的构建操作。否则,您必须将jar与主Android应用程序一起包含。
  • 确保您的主应用程序已引用绑定DLL,如果只有一个依赖项目引用,则会导致问题。

如果以上两个解决方案都无法解决您的问题,请告诉我,我认为Paul Betts已经为此库提供了有效的绑定。


我正在使用Paul Betts的绑定库,如上所述,我正在使用他的ModernHttpClient的0.9版本。我设置了一个测试项目,以防我正在处理的项目有问题: https://github.com/jdehlin/OkHttpTest。基本的、单个的项目解决方案,但我仍然得到了异常。除了以上信息之外,我在OSX上运行Xamarin Studio(indie)。 - jdehlin
嗯,是的,我也遇到了同样的问题。我注意到你的项目中有<TargetFrameworkVersion>v4.2</TargetFrameworkVersion>,而Paul则使用了2.3版本。我尝试进行更改,但此后你的应用程序就无法部署了。你的应用程序是否使用了Android 4.x特性? - jonathanpeppers
那个测试应用程序不应该使用任何高级功能,所以我不确定为什么它无法部署。我也不认为我正在处理的实际项目使用了4.x中的任何内容。回到家后,我会尝试更改目标版本。谢谢。 - jdehlin
玩了一下TargetFrameworkVersion,通过关闭快速部署使其成功部署。但仍然遇到相同的错误。还尝试使用最新版本的ModernHttpClient dlls(1.0.0),但没有任何区别。 - jdehlin

2

并不是直接回答为什么会抛出异常,但在Paul Betts的建议下,我切换到了Alpha频道,现在一切都正常了。


我敢打赌,如果你从源代码重新构建他的库,你可以让它在稳定版上运行。很多时候,Xamarin 在不同版本之间会破坏兼容性(至少对于 Android),除非你重新构建。 - jonathanpeppers
1
大家好,非常感谢这些帖子。经过“我不想承认的”几个小时,我终于让ModernHttpClient工作了...一路上还得学习Make和Maven。没有比“深入挖掘并找到错误”更好的学习系统的方法了,对吧!这个线程提供了非常需要的指引。 - Damien Sawyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接