Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java反射API:getMethod()工作正常,调用失败_Java_Android_Reflection - Fatal编程技术网

Java反射API:getMethod()工作正常,调用失败

Java反射API:getMethod()工作正常,调用失败,java,android,reflection,Java,Android,Reflection,我想我在相当深的层次上误解了Java反射。我已经记录了我的方法是什么(包括它应该取什么作为参数),以及我要传递的内容,它们完全匹配。getMethod()显然是在检索正确的方法,但当我调用它时,它会给我NoSuchMethodException错误 我使用此调用将createsession作为目标 protected void onHandleIntent(Intent i){ String methodName = i.getStringExtra("methodName");

我想我在相当深的层次上误解了Java反射。我已经记录了我的方法是什么(包括它应该取什么作为参数),以及我要传递的内容,它们完全匹配。getMethod()显然是在检索正确的方法,但当我调用它时,它会给我NoSuchMethodException错误

我使用此调用将createsession作为目标

protected void onHandleIntent(Intent i){
    String methodName = i.getStringExtra("methodName");
    String[] data = i.getStringArrayExtra("data");

    Method m = null;
    try{
        MyClass c = new MyClass();
        m = c.getClass().getMethod(methodName, String[].class);
        Log.v("this works", "This is printed, no problem");
        m.invoke(c, data);
        Log.v("this does not", "will not be printed");
    } catch(Exception NoSuchMethodException){
        Log.v("nosuchmethod", methodName + " was not found");
    }
}

public void createsession(String[] data)
    {
        System.out.println(data[0]);
    }
这是在通过getMethod分配方法对象后,使用.toString()打印方法对象时得到的结果:

method﹕ public void com.myPackage.myApp.MyClass.createsession(java.lang.String[])
这让我觉得getMethod不是问题所在,因为它返回了所有正确的信息

编辑 这一直在起作用

问题是try块现在负责它所产生的所有异常,或者我调用()产生的任何函数。在这种程度上,当被调用的函数本身返回异常时,invoke方法将其解释为它真正知道的唯一失败:“NoSuchMethodException”。我看到的NoSuchMethodException只是调用的方法中的一个NullPointerException进入了错误的catch块


我想我将永远不回答这个问题,这是对我所花时间的一个合理警告。我觉得这对其他人来说可能是一个有用的知识。

无需创建新实例。 试试这个

    m = MyClass.class.getMethod(methodName, String[].class);
    Log.v("this works", "This is printed, no problem");
    m.invoke(this, data);
    Log.v("this does not", "will not be printed");

您的目标方法是否是私有的?确保你的方法是公开的!对不起,我应该澄清一下:createsession是目标方法。哦,我看到它确实是公共的。。。Ops~我不知道~一切似乎都很好。你的班级是什么?OnHandleContent也是Myclass的方法吗?是的,也是。我没有发布大部分的类,但所有这些都包含在我的类中。这并没有解决我的问题。我确实认为这是获得方法名称、最佳实践以及所有内容的更好方法。不过,我还是在同一条船上。我刚刚修改了它。tryI恐怕仍然没有…方法被正确找到,但总是在调用时抛出它的异常。太有趣了!我在活动类中测试上述代码。它可以正常工作