c# - Accessing properties from Java Binding Library Interface in Xamarin -
i getting abstractmethoderror when trying x java.lang.object.
class datamessagehandler : java.lang.object, iroutemanagermessagehandler { public void process(message p0) { var message = p0; var cartesian = class.fromtype(typeof(cartesianfloat)); var value = (icartesian)message.getdata(cartesian); var x = value.x(); } }
where cartesianfloat implementation of icartesian.
icartesian:
[global::java.interop.javatypeparameters (new string [] {"t extends java.lang.number"})] public partial interface icartesian : ijavaobject { // metadata.xml xpath method reference: path="/api/package[@name='com.mbientlab.metawear.data']/interface[@name='cartesian']/method[@name='x' , count(parameter)=0]" [register ("x", "()ljava/lang/number;", "getxhandler:com.mbientlab.metawear.data.icartesianinvoker, metawearandroid")] global::java.lang.object x (); // metadata.xml xpath method reference: path="/api/package[@name='com.mbientlab.metawear.data']/interface[@name='cartesian']/method[@name='y' , count(parameter)=0]" [register ("y", "()ljava/lang/number;", "getyhandler:com.mbientlab.metawear.data.icartesianinvoker, metawearandroid")] global::java.lang.object y (); // metadata.xml xpath method reference: path="/api/package[@name='com.mbientlab.metawear.data']/interface[@name='cartesian']/method[@name='z' , count(parameter)=0]" [register ("z", "()ljava/lang/number;", "getzhandler:com.mbientlab.metawear.data.icartesianinvoker, metawearandroid")] global::java.lang.object z (); }
cartesianfloat:
public unsafe cartesianfloat () : base (intptr.zero, jnihandleownership.donottransfer) { if (handle != intptr.zero) return; try { if (gettype () != typeof (cartesianfloat)) { sethandle ( global::android.runtime.jnienv.startcreateinstance (gettype (), "()v"), jnihandleownership.transferlocalref); global::android.runtime.jnienv.finishcreateinstance (handle, "()v"); return; } if (id_ctor == intptr.zero) id_ctor = jnienv.getmethodid (class_ref, "<init>", "()v"); sethandle ( global::android.runtime.jnienv.startcreateinstance (class_ref, id_ctor), jnihandleownership.transferlocalref); jnienv.finishcreateinstance (handle, class_ref, id_ctor); } { } } // method explicitly implemented member of instantiated com.mbientlab.metawear.data.icartesian global::java.lang.object global::com.mbientlab.metawear.data.icartesian.x () { return global::java.interop.javaobjectextensions.javacast<java.lang.object>(((icartesian) this).x ()); } // method explicitly implemented member of instantiated com.mbientlab.metawear.data.icartesian global::java.lang.object global::com.mbientlab.metawear.data.icartesian.y () { return global::java.interop.javaobjectextensions.javacast<java.lang.object>(((icartesian) this).y ()); } // method explicitly implemented member of instantiated com.mbientlab.metawear.data.icartesian global::java.lang.object global::com.mbientlab.metawear.data.icartesian.z () { return global::java.interop.javaobjectextensions.javacast<java.lang.object>(((icartesian) this).z ()); } }
if try cast value cartesianfloat, says no method x() exists on value.
putting watch on value, has value of {(-0.062, 0.070, 1.010)}
metwear api sends encoded data in ble packet , can decode using following code. translated (than optimized) java code.
public void process(message p0) { var message = p0 bmi160threeaxismessage; var data = message.getdata(); var x = ((short)(data[1] << 8 | data[0])) / message.scale; var y = ((short)(data[3] << 8 | data[2])) / message.scale; var z = ((short)(data[5] << 8 | data[4])) / message.scale; }
Comments
Post a Comment