Android Question [SOLVED] Reflection and template argument

Discussion in 'Android Questions' started by wonder, May 24, 2019.

  1. wonder

    wonder Expert Licensed User

    SOLVED: https://www.b4x.com/android/forum/threads/reflection-and-template-argument.106102/#post-664183

    Hi!

    This is a Reflection question, so please read-on even if you're not familiar with LibGDX.

    With regards to LibGDX, I'm trying to access (with reflection) the "derivativeAt" method of the CatmullRomSpline class, but I'm unfortunately getting a NoSuchMethod exception.

    upload_2019-5-24_13-38-29.png
    https://libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/math/CatmullRomSpline.html

    LibGDX CatmullRomSpline Source code:
    https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/math/CatmullRomSpline.java

    For reference, I tried to access "valueAt", which I'm sure it works:
    Code:
    Dim out As lgMathVector2

    'This works!!
    preview_spline.ValueAt(out, 0.5)

    'This doesn't work!!
    Dim r As Reflector
    r.Target = preview_spline
    r.RunMethod4(
    "valueAt"Array(out, 0.5), Array As String("com.badlogic.gdx.math.Vector2""java.lang.float"))

    'java.lang.NoSuchMethodException: valueAt [interface com.badlogic.gdx.math.Vector, float]
    '    at java.lang.Class.getMethod(Class.java:1981)
    '    at java.lang.Class.getDeclaredMethod(Class.java:1960)
    '    at anywheresoftware.b4a.agraham.reflection.Reflection.runmethod(Reflection.java:214)
    '    at anywheresoftware.b4a.agraham.reflection.Reflection.RunMethod4(Reflection.java:857)
    '    at com.ninjadynamics.mangamotion.mangapage._drawpathpreview(mangapage.java:447)
    '    at com.ninjadynamics.mangamotion.mangapage._drawmotionpaths(mangapage.java:360)
    '    at com.ninjadynamics.mangamotion.main._lgs1_render(main.java:954)
    '    at java.lang.reflect.Method.invoke(Native Method)
    '    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
    '    at anywheresoftware.b4a.libgdx.lgScreenManager$lgScreen.render(SourceFile:125)
    '    at anywheresoftware.b4a.libgdx.lgScreenManager.Render(SourceFile:75)
    '    at anywheresoftware.b4a.libgdx.LibGDX$b.render(SourceFile:156)
    '    at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(SourceFile:449)
    '    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1553)
    '    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1253)
    '** Activity (main) Pause, UserClosed = true **
    'waiting for pause synchronization took too long; assuming deadlock and killing
    Can anyone please help or point me in the right direction? Many thanks in advance!
     
    Last edited: May 24, 2019
  2. Informatix

    Informatix Expert Licensed User

    Try:
    r.Target = preview_spline.InternalObject
     
    Peter Simpson likes this.
  3. wonder

    wonder Expert Licensed User

    Hi! Thanks for the quick reply!

    Code:
    Dim r As Reflector
    r.Target = preview_spline.InternalObject
    r.RunMethod4(
    "valueAt"Array(out, 0.5), Array As String("com.badlogic.gdx.math.Vector2""java.lang.float"))
    java.lang.NoSuchMethodException: valueAt [class com.badlogic.gdx.math.Vector2, float]

    Still the same... :(
     
  4. wonder

    wonder Expert Licensed User

    I found the solution! :) :D

    It seems that for a template type argument, "java.lang.Object" can be used.
    Also, for LibGDX the InternalObject member has to be used as well.

    Code:
    Dim out as lgMathVector2
    Dim r As Reflector
    r.Target = preview_spline.InternalObject
    Dim f = 0.5 As Float
    r.RunMethod4(
    "valueAt"Array(out, f), Array As String("java.lang.Object""java.lang.float"))
     
    Peter Simpson and Informatix like this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice