2011-09-07 38 views
0

我尝试使用反射(在Android应用程序)来调用一个方法,它只有当我做这种方式这样的方法并不例外 - 使用反射

Object impresora  = loadedClass.newInstance(); 
Object args[]  = {"00:15:0E:E0:DD:38", true}; 

for(Method m : impresora.getClass().getDeclaredMethods()) 
    if("BTConnection".compareTo(m.getName()) == 0) 
     int resultado = (Integer) m.invoke(impresora, args); 

工作,但我不希望迭代每次,所以我想这样,但是这是我得到的NoSuchMethodException提前

Method m = impresora.getClass().getDeclaredMethod("BTConnection"); 
m.invoke(impresora, args); 

感谢

+0

在你的第二个片段中,getDeclaredMethod需要2个参数而不是一个,如果你包含实际的代码将会很有帮助 – momo

+0

现在更新 –

+0

我已经给出了我的答案。希望这是有效的。你需要的参数,以尝试找到方法 – momo

回答

0

在你的第一个片段你在你的第二个SNI做object.getClass() Ppet你在做impresora.getClass()

+0

对不起,这是因为我试图使它更具可读性,但现在我把实际的代码 –

0

您需要实际的参数类型才能找到方法,否则它将尝试查找没有参数的方法,我猜测您的类中不存在参数。

错过:

Object args[] = {"00:15:0E:E0:DD:38", true};

我猜测,第一个参数是一个字符串和第二个是一个布尔值,所以为了找到方法,你需要做到以下几点:


Method m = c.getDeclaredMethod("BTConnection", String.class, Boolean.class);  
+0

我试过,但它没有工作,参数不是问题原因我尝试使用不需要它们的方法 –

+0

是否有可能为您提供方法在您的问题中的类,以便我们可以尝试一下? – momo