无法使用变量来调用java-android中的方法

时间:2017-07-01 07:27:14

标签: java android variables methods reflection

我已经尝试使用变量来调用java方法,使用method.invoke(),如Active Directory中所述。但似乎在method.invoke()中应该有一个对象或某些东西作为参数。我尝试过使用null,但是没有调用该方法。我的代码如下:

String ACTION = "cart";
Method method = SolverService.class.getDeclaredMethod("Method" + ACTION);
        method.invoke(null);

我有一个方法:

public void Methodcart(){ Toast.makeText(this,"Method called",Toast.LENGTH_LONG).show(); }

PS:我必须让method.invoke()工作。否则,我需要编写一个很长的switch-case语句列表。我已经阅读了文档但是对于我可能需要在这里使用的对象实例了解不多,因为我是Android应用程序开发的新手。 / p>

2 个答案:

答案 0 :(得分:0)

您可以尝试类似于下面显示的代码(Java反射) -

假设我有一个类ClassWithMethods.java,其中包含我想要在其他类中调用的方法,如下所示 -

public class ClassWithMethods {

    private int counter;

    public void printIt(){
        System.out.println("printIt() no param");
    }

    public void printItString(String temp){
        System.out.println("printIt() with param String : " + temp);
    }
}

现在我还有另一个类TestApp.java,它将在运行时使用Java Reflection调用ClassWithMethods类的方法 -

public class TestApp {

    public static void main(String[] args) {

    //no paramater
    Class noparams[] = {};

    //String parameter
    Class[] paramString = new Class[1];
    paramString[0] = String.class;

    //int parameter
    Class[] paramInt = new Class[1];
    paramInt[0] = Integer.TYPE;

    try{
            //load the ClassWithMethods at runtime
        Class cls = Class.forName("com.myapps.ClassWithMethods");
        Object obj = cls.newInstance();

        //call the printIt method
        Method method = cls.getDeclaredMethod("printIt", noparams);
        method.invoke(obj, null);

        //call the printItString method, pass a String param
        method = cls.getDeclaredMethod("printItString", paramString);
        method.invoke(obj, new String("someString"));



    }catch(Exception ex){
        ex.printStackTrace();
    }
   }

答案 1 :(得分:0)

我在我当前的项目中使用Java Reflection(因为你提到你正在使用Android Studio)从Android操作系统内部的PowerProfile类中获取设备的电池容量。

{{1}}

以下是PowerProfile类中实际方法结构的截图 -

enter image description here