Xamarin.Forms Android绑定库错误

7
我目前正在处理一个关于Xamarin Forms Android绑定库的问题。 我已经将一个 .jar 库放在我的绑定项目中,但我意识到该库没有完全加载。
当我构建我的绑定项目时,它编译正常,但是输出中仍然有一些警告。
1>BINDINGSGENERATOR: 警告 BG8102: 类 Java.Util.LinkedHashMap 具有未知的基类型 Java.Util.HashMap。 1>BINDINGSGENERATOR: 警告 BG8103: 类 Com.MyParams 具有无效的基类型 java.util.LinkedHashMap。 1>BINDINGSGENERATOR: 警告 BG8701: 在 Com.TagOp 中的 GetParams 方法的 com.MyParams 中返回类型无效。 1>BINDINGSGENERATOR: 警告 BG8801: 在 Com.TagOp 中的 TagOps 方法中 com.MyParams 中的参数类型无效。 1>BINDINGSGENERATOR: 警告 BG8801: 在 Com.TagOp 中的 TagOps 方法中 com.MyParams 中的参数类型无效。 1>BINDINGSGENERATOR: 警告 BG8801: 在 Com.Tag 中的 TagPage 方法中 com.MyParams 中的参数类型无效。
在我的Android代码中,我不能使用 Com.MyParams 类,因为它没有被加载。
自从 Xamarin 更新为 Visual Studio 2017 后,出现了这个问题。
您能解决这个问题吗?非常感谢。

你检查了你的Android项目源代码了吗?那个项目依赖其他库吗?如果是这样,你需要将其他库导入到你的绑定项目中。 - Jesse Jiang
我的Android项目引用了Xamarin库和我的绑定项目。当我查看绑定项目的obj/文件夹时,我的com.MyParams没有生成。因此,我的猜测是绑定项目没有生成这个类,因为我在主贴中发布了警告。 - Eastrall
这个问题是自从更新了Visual Studio 2017的Xamarin之后出现的。您的意思是如果没有更新Xamarin会好一些吗?那么它的版本是多少? - Grace Feng
我在五月份更新了Xamarin,但它在VS2017上无法工作。我正在使用Xamarin 4.5.0.486。 - Eastrall
我有一份通用指南供您参考:https://gist.github.com/JonDouglas/dda6d8ace7d071b0e8cb 正如之前许多人指出的那样,您很可能缺少生成这些类型的依赖库。 - Jon Douglas
1个回答

2

HashMapLinkedHashMap是不被识别的,因此无法实例化基于它们的任何内容。

当数据绑定不认识一个类时,可能缺少注解,可能没有扩展BaseObservable类,或者方法名错误get/set(需要与字段名称匹配);具体要求取决于是否需要单向或双向数据绑定。查看生成的代码通常可以提示需要更改的内容。

然而,直接将JAR类进行数据绑定似乎不可能,除非在其中添加所需的注解,然后构建JAR,以使其可绑定。 Android Data Binding Library和Xamarin Java Bindings Metadata的文档解释了这一点(从头开始复制所需的Java类,完全可绑定,可能是最快捷的方式,如果不是唯一的方式)。

只能通过替换要绑定到GUI的类来解决这个问题 - 对于相当简单的类,或者使用Java 反编译器(以了解要使用的字段)。


那么我需要告诉绑定生成器使用 HashMap 扩展 LinkedHashMap 类吗?我尝试了 <attr path="/api/package[@name='java.util']/class[@name='LinkedHashMap']" name="extends">java.util.HashMap</attr> 但是出现了错误:1>BINDINGSGENERATOR : warning BG8A04: <attr path="/api/package[@name='java.util']/class[@name='LinkedHashMap']"/> matched no nodes. - Eastrall
不行,你需要拥有JAR类中的源代码或者重新创建相似的类......因为数据绑定期望特定的方法名和注释,所以不能随便使用任何类进行绑定;例如@Bindable用于getter方法......没有这些内容,这些方法将不会被暴露。虽然我实际上维护了一个有许多绑定UI元素、第三方库等的代码库,并已经尝试过你要做的事情,尽管在Java中无法做到-我们只能努力重建所需的类,但是可以进行绑定......或者创建类,仅为了绑定它们和JAR。 - Martin Zeitler
你仍然觉得奇怪,甚至这些常见的类也找不到;你确定已经安装并引用了JDK吗? - Martin Zeitler
我从2016年9月开始使用JDK,刚刚更新到最新版本,但问题仍然存在。我没有库的源代码,并且它曾经在Xamarin的早期版本上运行。自5月份的更新以来(我认为是5月份的更新),警告出现了,现在由于缺少此类型,我无法编译我的Android版本。 - Eastrall
https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/troubleshooting-bindings/ 这里有一些针对 VS.NET 的特定疑难解答提示……而缺少的类通常应该包含在 JDK 的 rt.jar(运行时)中……正如这里所示:https://github.com/xamarin/proguard/blob/master/examples/applications.pro ……它说-libraryjars <java.home>/lib/rt.jar(ProGuard 是一个 Java 混淆器)……当明确引用 rt.jar 并将其设置为 libraryjars 时不会改变情况……那么我真的不知道了。 - Martin Zeitler
显示剩余3条评论

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