Это самая глупая ошибка, с которой я столкнулся до сих пор. У меня было приложение 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; commit()
транзакции после onPause()
на pre-Honeycomb и onStop()
на post-Honeycomb Activity
. Используйте onCreate()
, onResumeFragments()
и onPostResume()
commitAllowingStateLoss()
только в качестве последнего средства
Вы можете получить содержимое 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