删除"虚拟"使用metadata.xml绑定Xamarin库中的关键字

时间:2015-07-17 04:16:37

标签: android binding xamarin metadata

我从Java绑定了一个Xamarin库,它生成了1个错误的函数。 关键字应为覆盖,但目前为虚拟

  

// Metadata.xml XPath方法参考:path =" / api / package [@name =' com.mapbox.mapboxsdk.tileprovider'] / class [@name =&#39 ; MapTileLayerBase.CacheTask'] /方法[@name =' doInBackground'和count(参数)= 1和参数[1] [@type =' java.lang.Object ...']]"
     [注册(" doInBackground","([Ljava / lang / Object;)Ljava / lang / Void;"," GetDoInBackground_arrayLjava_lang_Object_Handler")]

     

受保护的虚拟不安全的全局:: Java.Lang.Object DoInBackground   (params global :: Java.Lang.Object [] p0)

我需要将虚拟更改为覆盖,但我不知道该怎么做。

我在互联网上发现一些评论说我应该试试这个:

<attr path="/api/package[@name='com.mapbox.mapboxsdk.tileprovider']/class[@name='MapTileLayerBase.CacheTask']/method[@name='doInBackground']" name="virtual">false</attr>

我试过但它没有用。

你知道怎么改变吗?

4 个答案:

答案 0 :(得分:1)

解决方案是在true映射中将Metadata.xml设置为<attr path="/api/package[@name='com.mapbox.mapboxsdk.tileprovider']/class[@name='MapTileLayerBase.CacheTask']/method[@name='doInBackground']" name="final">true</attr>

virtual

这有效地从方法签名中删除了final关键字,并且也没有添加to_date('21-02-2006 14:06:14','dd-mm-yyyy hh24:mi:ss')关键字。奇怪的行为,但它的确有效。

答案 1 :(得分:1)

试试:

const clientObj = { //18 fields };
const [client, setClient] = useState(clientObj);

const onChange = event => {
  const { name, value } = event.target;
  setClient(prevState => ({
    ...prevState,  // shallow copy all previous state
    [name]: value, // update specific key/value
  }));
};

...

<Form.Control
  name="name"
  value={client.name}
  onChange={onChange}
  placeholder="Your name"
  type="text"
  required
/>
<Form.Control
  name="lastName"
  value={client.lastName}
  onChange={onChange}
  placeholder="Your last name"
  type="text"
  required
/>
<Form.Control
  name="age"
  value={client.age}
  onChange={onChange}
  placeholder="Your age"
  type="text"
  required
/>
...etc...

如果上一步不起作用,则采用更hacky的方式:

<attr path="/api/package[@name='com.mapbox.mapboxsdk.tileprovider']/class[@name='MapTileLayerBase.CacheTask']/method[@name='doInBackground']" name="managedOverride">override</attr>

答案 2 :(得分:0)

您确定需要在API中公开此方法吗?您可以使用此线程http://forums.xamarin.com/discussion/1871/binding-java-library-with-parameter-type-void中的方法,只需删除此方法即可。通常这种方法不是从外面明确使用的。

答案 3 :(得分:0)

  1. 在obj / Debug / generated / src中找到该类的MCW(com.mapbox.mapboxsdk.tileprovider.cs)
  2. 将该文件复制到Additions /文件夹并将其包含在项目中。
  3. 如有必要,将BuildAction更改为编译
  4. 更改虚拟以覆盖
  5. 来自流程的课程