Получите данные для входа в систему с веб-сайта, размещенного в веб-представлении Android.

Это самая глупая ошибка, с которой я столкнулся до сих пор. У меня было приложение Fragment, отлично работающее для API & lt; 11 и Force Closing в API> 11.

Я действительно не мог понять, что они изменили внутри жизненного цикла Activity при вызове saveInstance, но я вот как я решил это :

@Override
protected void onSaveInstanceState(Bundle outState) {
    //No call for super(). Bug on API Level > 11.
}

Я просто не звоню в .super(), и все отлично работает. Я надеюсь, что это сэкономит вам некоторое время.

EDIT: после еще нескольких исследований, это известная ошибка в пакете поддержки.

Если вам нужно сохранить экземпляр и добавить что-то в свой outState Bundle, вы можете использовать следующее:

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putString("WORKAROUND_FOR_BUG_19917_KEY", "WORKAROUND_FOR_BUG_19917_VALUE");
    super.onSaveInstanceState(outState);
}

EDIT2: это также может произойти, если вы пытаетесь выполнить транзакцию после того, как ваш Activity исчез в фоновом режиме. Чтобы избежать этого, вы должны использовать commitAllowingStateLoss()

EDIT3:

. Вышеупомянутые решения были устранением проблем в ранних библиотеках support.v4 из того, что я помню. Но если у вас все еще есть проблемы с этим, вы MUST также читаете блог @AlexLockwood : Fragment Transactions & amp;

2
задан olajide 28 February 2019 в 10:32
поделиться

1 ответ

Вы можете получить содержимое WebView с помощью этой функции:

yourWebView.evaluateJavascript(
        "(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();",
         new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String html) {
                Log.d("HTML", html); 
                // Here you work with the content of the page which is stored in the 'html' variable
            }
    });

Поскольку вы можете читать содержимое страницы, вы можете либо скрыть данные, которые вы хотите прочитать, в веб-сайт в скрытом поле (например, <input type="hidden" id="emailAddress" name="emailAddress" value="someone@example.org">).

Или вы можете создать собственный Activity, где пользователь может вставить свой адрес электронной почты, а затем вы можете опубликовать вставленный адрес электронной почты на своем веб-сайте, используя функцию WebView.postUrl(String url, byte[] postData) (например, webView.postUrl("https://yourWebsite.com/index.php", "emailAddress=someone@example.org".getBytes());).

Источник: https://developer.android.com/reference/android/webkit/WebView.html Как получить HTML-контент из веб-просмотра? Как опубликовать данные для WebView Android

0
ответ дан Marvin Klar 28 February 2019 в 10:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: