Java Reflection - Неверное количество аргументов; ожидается 0, получил 1 - PullRequest
0 голосов
/ 26 октября 2018

Я использую этот код 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 голосов
/ 26 октября 2018

В строке

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

method.invoke() теперь будет звонить getTetherableIfaces() как invoke():

Вызывает базовый метод, представленный этим объектом Method, для указанного объекта с указанными параметрами

, который выглядит как метод получения и, таким образом, не принимает никаких параметров. Затем вы пытаетесь передать аргумент, который вызовет эту ошибку

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

Похоже, вы хотели позвонить methodTether.invoke()

0 голосов
/ 26 октября 2018

Ошибка говорит: «Неверное количество аргументов; ожидается 0, получено 1». Это означает, что метод, который вы вызываете, не тот, о котором вы думаете. Вызываемый метод не имеет аргументов, и вы передаете ему аргумент.

Вы вызываете method вместо methodTether.

...