我正试图通过以下方式将接口的使用从Parse的Android SDK转换为C#事件:http://developer.xamarin.com/guides/android/advanced_topics/java_integration_overview/binding_a_java_library_(.jar)/#Normalizing_the_API或大部分。我需要转换的具体部分是这样的接口:
https://parse.com/docs/android/api/com/parse/SendCallback.html
注意接口如何只有一个方法(Done(ParseException e))。好吧,当我尝试创建一个类似教程的帮助器类时,我提出不仅需要实现该方法,还需要从一些随机模糊的ParseCallback1接口实现另一种方法。
生成的界面如下:
// Metadata.xml XPath interface reference: path="/api/package[@name='com.parse']/interface[@name='SendCallback']"
[Register ("com/parse/SendCallback", "", "Com.Parse.ISendCallbackInvoker")]
public partial interface ISendCallback : global::Com.Parse.IParseCallback1 {
// Metadata.xml XPath method reference: path="/api/package[@name='com.parse']/interface[@name='SendCallback']/method[@name='done' and count(parameter)=1 and parameter[1][@type='com.parse.ParseException']]"
[Register ("done", "(Lcom/parse/ParseException;)V", "GetDone_Lcom_parse_ParseException_Handler:Com.Parse.ISendCallbackInvoker, ParseBindings")]
void Done (global::Com.Parse.ParseException
}
它确实从ParseCallback1扩展但是为什么在Java中我只需要实现一个方法,这里有两个?
最重要的是,接口在jar上不公开,所以当我编译使用这个帮助器类的项目时:
internal partial class SendCallbackEventMapper : Java.Lang.Object,
Com.Parse.ISendCallback
{
public void Done(Com.Parse.ParseException e) {
}
public void Done(Java.Lang.Object o) {
}
}
我收到附件上的错误。
Error: error: ParseCallback1 is not public in com.parse; cannot be accessed from outside package
com.parse.ParseCallback1
(ParsePush)
Error: error: name clash: done(Throwable) in SendCallbackEventMapper and done(T) in ParseCallback1 have the same erasure, yet neither overrides the other
public void done (java.lang.Throwable p0)
where T is a type-variable:
T extends Throwable declared in interface ParseCallback1
(ParsePush)
我有什么选择?我真的需要实现这些方法。我甚至不能使用提供的接口,如SendCallback这些错误,所以我不能真正使用Parse SDK中的任何InBackground方法。
答案 0 :(得分:0)
为了对这个IParseCallback1问题进行操作,只需将这些行添加到/Transforms/Metadata.xml文件中:
<attr path="/api/package[@name='com.parse']/interface[@name='ParseCallback1']" name="visibility">public</attr>
<attr path="/api/package[@name='com.parse']/interface[@name='ParseCallback2']" name="visibility">public</attr>