Вот довольно запутанный вопрос. Я пытаюсь получить доступ к элементу экземпляра webviewcore веб-просмотра через отражение. Мне нужна ссылка на webviewcore, которая используется моим веб-просмотром, поэтому я могу вызвать метод, который использует webviewcore. Я должен сделать это через отражение, потому что публичный sdk не позволяет вам получить доступ к этому классу. Я знаю, что использование рефлексии для этого не рекомендуется, но я успокоился.Android: как получить экземпляр поля члена через отражение
Я прочитал here, что для достижения этой цели я хотел бы сделать что-то вроде этого:
Class aClass = MyObject.class
Field field = aClass.getField("someField");
MyObject objectInstance = new MyObject();
Object value = field.get(objectInstance);
field.set(objetInstance, value);
Проблема с делать это (и, возможно, им-недоразумение это) является то, что она выглядит, как я должен создать новый экземпляр WebViewCore для работы с ним, а затем установите его обратно в мой экземпляр. Сначала и формост, я понимаю это правильно. Если да, то кто-то может перевести код выше, чтобы сделать то, что я ищу. Если мое понимание неверно, кто-нибудь знает, как еще я могу получить доступ к WebViewCore экземпляра веб-представления?
Спасибо!
EDIT: Из-за путаницы я переформулирую свой вопрос. У меня есть экземпляр webview. Этот веб-просмотр имеет поле-член, называемое «mWebViewCore», которое является экземпляром класса WebViewCore. WebViewCore имеет класс-член под названием TextSelectionData. Мне нужно получить доступ к объекту TextSelectionData с помощью отражения. Я знаю, как получить доступ к полям и методам веб-просмотра через отражение. Поэтому я могу получить поле mWebViewCore, но я не знаю, как взять это поле и получить доступ к его полям, методам, классам и т. Д. Широкие штрихи берут экземпляр объекта, определяют конкретное поле в этом экземпляре и получают доступ к полям этого поля.
Извините за путаницу. Это происходит из-за моего слабого понимания рефлексии и частично из-за того, что я недостаточно изучил класс WebViewCore. вот где я получил в коде:
Class c = mWebView.getClass();
try {
Field webViewCoreField = c.getDeclaredField("mWebViewCore");
webViewCoreField.setAccessible(true);
//how do i get the fields of webViewCoreField?
}
Аргумент 'Field.get' - это экземпляр, из которого вы пытаетесь получить указанное поле. Зачем вам создавать новый? Тогда вы не получите тот набор, который вам нужен. –
Я вижу; вы следуете учебнику Jenkiv и неправильно понимаете его: этот учебник создает экземпляр класса для извлечения поля из-за отсутствия экземпляра - у вас уже есть * экземпляр. –
У меня есть экземпляр webview, а не webviewcore. Я хочу получить доступ к одному из полей webviewcore. Поле webviewcore - это сам объект, поэтому я не могу просто установить значение, потому что значение этого поля является объектом, который я не могу создать. Простите, если это сбивает с толку. Может ли один из вас предоставить какой-то код о том, как это сделать. – aamiri