解析Android SDK绑定添加,如何将接口转换为事件

时间:2015-03-24 22:51:46

标签: c# android xamarin

我正试图通过以下方式将接口的使用从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方法。

1 个答案:

答案 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>