Java反射-参数数量错误;预期为0,得到1

时间:2018-10-26 18:47:55

标签: java reflection illegalargumentexception

我正在运行此Java代码

ConnectivityManager connectivityManager = ((ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE));
    try {
        Method method = connectivityManager.getClass().getDeclaredMethod("getTetherableIfaces");
        String[] strings = ((String[]) method.invoke(connectivityManager));
        Log.i("hotspot", "getIface: "+strings.toString());
        Method methodTether = connectivityManager.getClass().getDeclaredMethod("tether",String.class);
        methodTether.setAccessible(true);
        String[] param =new String[]{"wlan0"};

        int i = (int) method.invoke(connectivityManager,"wlan0");
        Log.i(TAG, "getIface: "+ "errorcode"+ i);

    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }

但我收到此错误

 java.lang.IllegalArgumentException: Wrong number of arguments; expected 0, got 1
    at java.lang.reflect.Method.invoke(Native Method)

这是我尝试调用的系绳函数。

 public int tether(String iface) {
    try {
        return mService.tether(iface);
    } catch (RemoteException e) {
        throw e.rethrowFromSystemServer();
    }
}

我尝试使用object[]{"wlan0"}, String[]{"wlan0"}, (object){"wlan0"}, {"wlan0"}(Object[])String[]{"wlan0"}调用该方法,但出现相同的错误。我无法理解我在做什么错。对于任何帮助,我将感激不尽。

2 个答案:

答案 0 :(得分:2)

错误显示“参数数量错误;预期为0,得到1”。这意味着您正在调用的方法不是您认为的那种方法。被调用的方法没有任何参数,您正在向其传递参数。

您正在调用method而不是methodTether

答案 1 :(得分:1)

在线

Method method = connectivityManager.getClass().getDeclaredMethod("getTetherableIfaces");

method.invoke()现在将以invoke()的身份呼叫getTetherableIfaces()

  

在具有指定参数的指定对象上调用此Method对象表示的基础方法

看起来像一个getter方法,因此不接受任何参数。然后尝试传递一个会导致此错误的参数

String[] strings = ((String[]) method.invoke(connectivityManager));

您似乎要打{{1​​}}