我不断收到此错误消息:
06-13 18:53:33.839: W/System.err(19893): java.lang.NoSuchMethodException: showIt
06-13 18:53:33.839: W/System.err(19893): at java.lang.ClassCache.findMethodByName(ClassCache.java:247)
06-13 18:53:33.839: W/System.err(19893): at java.lang.Class.getDeclaredMethod(Class.java:731)
我确定我的方法存在,我尝试从asynctask开始。 这是方法:
public static void showIt(String[] result) {
这是我尝试过的代码:
try {
Class<?> p = Class.forName(executeClass);
Object t = p.newInstance();
Method m = p.getDeclaredMethod(executeMethod, p);
m.invoke(t, result);
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:1)
三个问题......
getDeclaredMethod第二个参数必须是showIt方法的参数类数组。
因为该方法是静态的,所以将对象传递给invoke方法的第一个参数是没用的。
因为调用方法是varargs,所以必须将结果包装到Object []中,以便作为例外传递。
最后,这是一个有效的代码snipet。
String[] result = new String[] { "res" };
Class<?> p = Class.forName(executeClass);
Method m = p.getDeclaredMethod("showIt", result.getClass());
m.invoke(null, new Object[] {result});
答案 1 :(得分:1)
鉴于executeClass = "YourClass"
和executeMethod = "showIt"
,p.getDeclaredMethod(executeMethod, p)
正在尝试查找showIt(YourClass arg)
,但您有showIt(String[] arg)
。
尝试p.getDeclaredMethod(executeMethod, String[].class)
。
答案 2 :(得分:0)
你有两个错误:
public class Main {
public static void main(String[] args){
try {
Class<?> p = Main.class;
String[] arguments = {"ciao"};
Method m = p.getDeclaredMethod("showIt",String[].class);
m.invoke(null, arguments);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void showIt(String[] result) {
System.out.println(result[0]);
}
}