在活动中按字符串名称调用函数



我试图以字符串形式通过名称调用函数:

Method method = null;
try {
method = Class.forName("com.lab.android.TabActivity").getMethod(item,String.class);
method.invoke(this, null);
} catch (NoSuchMethodException e) {
Log.e("DTAG","NoSuchMethodException "+e.getMessage());
e.printStackTrace();
} catch (ClassNotFoundException e) {
Log.e("DTAG","ClassNotFoundException "+e.getMessage());
e.printStackTrace();
} catch (IllegalAccessException e) {
Log.e("DTAG","IllegalAccessException "+e.getMessage());
e.printStackTrace();
} catch (InvocationTargetException e) {
Log.e("DTAG","InvocationTargetException "+e.getMessage());
e.printStackTrace();
}

我得到了一个答案:

NoSuchMethodException com.lab.android.TabActivity.somesome [class java.lang.String]

这是我主动性中的函数:

public static void somesome() {
Log.d("DTAG","Great Success");
}

首先,您的方法在TabActivity类中是静态的,因此您应该使用getDeclaredMethod而不是getMethod,并且您的方法接受0个参数,因此您应将null作为参数而非String.class传递,还应调用静态方法,您应在invoke中传递null而不是此

Method method = null;
String methodName = "somesome";
try {
method = Class.forName(TabActivity.class.getName()).getDeclaredMethod(methodName, null);
method.invoke(null, null);
} catch (NoSuchMethodException e) {
Log.e("DTAG","NoSuchMethodException "+e.getMessage());
e.printStackTrace();
} catch (ClassNotFoundException e) {
Log.e("DTAG","ClassNotFoundException "+e.getMessage());
e.printStackTrace();
} catch (IllegalAccessException e) {
Log.e("DTAG","IllegalAccessException "+e.getMessage());
e.printStackTrace();
} catch (InvocationTargetException e) {
Log.e("DTAG","InvocationTargetException "+e.getMessage());
e.printStackTrace();
}

此代码将在日志中打印Great Success

最新更新