2017-02-03 102 views
0

我在Visual Studio中使用xamarin,并尝试链接文件(java到C#) 我正在使用库绑定(android)来整合文件,但对于某些方法这个过程转换失败。绑定aar Visual Studio(Xamarin)

错误消息

Class X does not implement inherited abstract member 'AsyncTask.DoInBackground (params Object [])' 

我尝试配置的元数据,但我解决不了这些错误 有人已经看到这个问题..你知道如何解决?

API XML

<class abstract="false" deprecated="not deprecated" extends="android.os.AsyncTask" extends-generic-aware="android.os.AsyncTask&lt;java.lang.Object, java.lang.Void, com.ingomoney.ingosdk.android.http.json.response.base.MobileStatusResponse&gt;" final="false" name="ApiCallAsyncTask" static="false" visibility="public"> 
    <constructor deprecated="not deprecated" final="false" name="ApiCallAsyncTask" static="false" type="com.ingomoney.ingosdk.android.http.asynctask.ApiCallAsyncTask" visibility="public"> 
    <parameter name="p0" type="com.ingomoney.ingosdk.android.http.asynctask.callback.BaseApiCallAsyncTaskCallback"> 
    </parameter> 
    <parameter name="p1" type="com.ingomoney.ingosdk.android.http.json.request.base.BaseRequest"> 
    </parameter> 
    <parameter name="p2" type="boolean"> 
    </parameter> 
    <parameter name="p3" type="boolean"> 
    </parameter> 
    </constructor> 
<constructor deprecated="not deprecated" final="false" name="ApiCallAsyncTask" static="false" type="com.ingomoney.ingosdk.android.http.asynctask.ApiCallAsyncTask" visibility="public"> 
<parameter name="p0" type="com.ingomoney.ingosdk.android.http.asynctask.callback.BaseApiCallAsyncTaskCallback"> 
</parameter> 
<parameter name="p1" type="com.ingomoney.ingosdk.android.http.json.request.base.BaseRequest"> 
</parameter> 
<parameter name="p2" type="boolean"> 
</parameter> 
</constructor> 
<constructor deprecated="not deprecated" final="false" name="ApiCallAsyncTask" static="false" type="com.ingomoney.ingosdk.android.http.asynctask.ApiCallAsyncTask" visibility="public"> 
<parameter name="p0" type="com.ingomoney.ingosdk.android.http.asynctask.callback.BaseApiCallAsyncTaskCallback"> 
</parameter> 
<parameter name="p1" type="com.ingomoney.ingosdk.android.http.json.request.base.BaseRequest"> 
</parameter> 
</constructor> 
<method abstract="false" deprecated="not deprecated" final="false" name="doInBackground" native="false" return="com.ingomoney.ingosdk.android.http.json.response.base.MobileStatusResponse" static="false" synchronized="false" visibility="protected"> 
<parameter name="p0" type="java.lang.Object..."> 
</parameter> 
</method> 
<method abstract="false" deprecated="not deprecated" final="false" name="onPostExecute" native="false" return="void" static="false" synchronized="false" visibility="protected"> 
<parameter name="p0" type="com.ingomoney.ingosdk.android.http.json.response.base.MobileStatusResponse"> 
</parameter> 
</method> 
<method abstract="false" deprecated="not deprecated" final="false" name="writeDataForRequestObject" native="false" return="void" static="false" synchronized="false" visibility="protected"> 
<parameter name="p0" type="java.net.HttpURLConnection"> 
</parameter> 
<parameter name="p1" type="java.lang.Object"> 
</parameter> 
<exception name="IOException" type="java.io.IOException"> 
</exception> 
</method> 
<field deprecated="not deprecated" final="true" name="LOCK" static="true" transient="false" type="java.lang.Object" type-generic-aware="java.lang.Object" visibility="protected" volatile="false"> 
</field> 
<field deprecated="not deprecated" final="true" name="baseRequest" static="false" transient="false" type="com.ingomoney.ingosdk.android.http.json.request.base.BaseRequest" type-generic-aware="com.ingomoney.ingosdk.android.http.json.request.base.BaseRequest" visibility="protected" volatile="false"> 
</field> 
<field deprecated="not deprecated" final="true" name="blocking" static="false" transient="false" type="boolean" type-generic-aware="boolean" visibility="protected" volatile="false"> 
</field> 
<field deprecated="not deprecated" final="true" name="callback" static="false" transient="false" type="com.ingomoney.ingosdk.android.http.asynctask.callback.BaseApiCallAsyncTaskCallback" type-generic-aware="com.ingomoney.ingosdk.android.http.asynctask.callback.BaseApiCallAsyncTaskCallback" visibility="protected" volatile="false"> 
</field> 
<field deprecated="not deprecated" final="true" name="showDialog" static="false" transient="false" type="boolean" type-generic-aware="boolean" visibility="protected" volatile="false"> 
</field> 
</class> 

元数据

<metadata> 
    <!-- 
    This sample removes the class: android.support.v4.content.AsyncTaskLoader.LoadTask: 
    <remove-node path="/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']" /> 

    This sample removes the method: android.support.v4.content.CursorLoader.loadInBackground: 
    <remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" /> 
    --> 

    <!-- There are also some methods that need to have their generic _parameter_ types simplified to `java.lang.Object`. 
     Possible error message: Error CS0115: `SomeMethod(..., T, ...)' is marked as an override but no suitable method found to override (CS0115) 
     Possible error message: Error CS0535: `SomeClass' does not implement interface member `SomeMethod(..., Java.Lang.Object,...)' (CS0535) 
     Possible error message: Error CS0534: `SomeClass' does not implement inherited abstract member `SomeMethod(..., Java.Lang.Object,...)' (CS0534) --> 
    <remove-node path="/api/package[@name='com.ingomoney.ingosdk.android.http.asynctask']/class[@name='ApiCallAsyncTask']" /> 
    <remove-node path="/api/package[@name='com.ingomoney.ingosdk.android.http.asynctask']/class[@name='CustomApiCallAsyncTask']" /> 
    <remove-node path="/api/package[@name='com.ingomoney.ingosdk.android.http.asynctask']/class[@name='ExtractZipFileAsyncTask']" /> 
    <remove-node path="/api/package[@name='com.ingomoney.ingosdk.android.http.asynctask']/class[@name='GetApplicationPropertiesApiCallAsyncTaskCallback']" /> 
    <remove-node path="/api/package[@name='com.ingomoney.ingosdk.android.http.asynctask']/class[@name='GetImageBytesAsyncTask']" /> 
    <remove-node path="/api/package[@name='com.ingomoney.ingosdk.android.http.asynctask']/class[@name='GetRegisteredCardsAsyncTask']" />  
    <remove-node path="/api/package[@name='com.ingomoney.ingosdk.android.asynctask']/class[@name='SavePictureAsyncTask']" /> 
    <remove-node path="/api/package[@name='com.ingomoney.ingosdk.android.http.asynctask']/class[@name='StoreImageBytesApiCallAsyncTask']" /> 
    <remove-node path="/api/package[@name='com.ingomoney.ingosdk.android.asynctask']/class[@name='ValidateCheckImagesWithA2iaAsyncTask']" />  
</metadata> 
+0

“doInBackground”的API xml描述是什么? – SushiHangover

+0

API xml?对不起..这是我的第一个exp与xamain绑定..在哪里我可以看到API xml? ..tnks –

+0

'obj \ Debug \ api.xml'为自动生成的:https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/customizing-bindings/ java-bindings-metadata /#概述 – SushiHangover

回答

0

您的问题最有可能就坐落在这里:

<method abstract="false" deprecated="not deprecated" final="false" name="doInBackground" native="false" return="com.ingomoney.ingosdk.android.http.json.response.base.MobileStatusResponse" static="false" synchronized="false" visibility="protected"> 
<parameter name="p0" type="java.lang.Object..."> 
</parameter> 
</method> 

正如你可以在这里看到,doInBackground返回com.ingomoney.ingosdk.android.http.json.response.base.MobileStatusResponse,并采取了参数的方法java.lang.Object...。这需要完全匹配接口所期望的内容,如果没有,你需要“哑”对象类型。

在你正在运行到部分泛型支持短,http://docs.xamarin.com/guides/android/advanced_topics/limitations/#Partial_Java_Generics_Support

有几件事情可以做:

  1. 创建一个局部类有过错的类和内创建替代:

protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] params){...}

  • 如果您打算不是在所有使用这个类,使用<remove-node>删除类:https://gist.github.com/JonDouglas/dda6d8ace7d071b0e8cb#removing-types
  • 有办法在Metadata.xml解决这个问题为好,但我不得不看一个样本。理想情况下,您可能会更改managedReturn,managedType或甚至argsType

    +0

    酷..我现在发布我的元数据 我一直在尝试使用该标签,但重建显示我同样的错误.. 看我的元数据 –