У меня проблема с вызовом newInstance с использованием Reflection в Android.
Мой интерфейс:
public interface IGiver {
public int getNr();
}
Мой класс для вызова Отражение:
public class NrGiver implements IGiver {
int i = 10;
@Override
public int getNr() {
return i;
}
}
То, как я пытаюсь вызвать getNr:
String packageName = "de.package";
String className = "de.package.NrGiver";
String apkName = getPackageManager().getApplicationInfo(packageName, 0).sourceDir;
PathClassLoader myClassLoader =
new dalvik.system.PathClassLoader(
apkName,
ClassLoader.getSystemClassLoader());
Class c = Class.forName(className);
IGiver giver = (IGiver) c.newInstance();
Последняя строка не работает, это вызывает ошибку, и мое приложение останавливается.
Я знаю, что это ошибка newInstance, но я хочу работать с объектом IGiver.
Пожалуйста, помогите мне.
Мое решение:
Эй, ребята, наконец, я получил курицу.
Я нашел другой способ. на этот раз я также использовал newInstance, но на этот раз он работал.
Мое решение:
Class c = Class.forName(className);
Method methode = c.getDeclaredMethod("getNr");
Object i = methode.invoke(c.newInstance(), new Object[]{});
И это то, что я хотел сделать.
У меня есть NrGiver.class где-то на моем телефоне. И это реализует интерфейс IGiver. Таким образом, он может быть загружен в мое приложение динамически. Мне нужно Integer из класса NrGiver. Так что я могу сделать мой код универсальным. Я попытался привести объект к своему интерфейсу, но это не удалось.
Итак, я нашел другой способ вызвать метод класса.
Спасибо за помощь