Ошибка веб-просмотра NullPointerException android.webkit.WebViewDatabase.initDatabase(WebViewDatabase.java:234)
Получаю из Google Play сообщения, что мое приложение разбилось, в msg
java.lang.NullPointerException
at android.webkit.WebViewDatabase.initDatabase(WebViewDatabase.java:234)
at android.webkit.WebViewDatabase.init(WebViewDatabase.java:212)
at android.webkit.WebViewDatabase.access$000(WebViewDatabase.java:40)
at android.webkit.WebViewDatabase$1.run(WebViewDatabase.java:193)
Я не нахожусь в google или в stackoverflow аналогичном probloem, поэтому я не знаю, почему этот crach, но я знаю эту причину webview.
Ответы
Ответ 1
Похоже на то, что здесь проблема (плюс потенциальное обходное решение):
https://code.google.com/p/android/issues/detail?id=35204
Я нашел здесь код для WebViewDatabase (это не совсем такая же версия, но для получения изображения достаточно контекста):
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/webkit/WebViewDatabase.java#WebViewDatabase.initDatabase%28android.content.Context%29
Если вы посмотрите на код для initDatabase(), на линии, которую я обозначил "****", есть потенциальный NPE. Обратите внимание, что следующая строка проверяет значение NULL, поэтому он выглядит немного тупым:
private void initDatabase(Context context) {
try {
mDatabase = context.openOrCreateDatabase(DATABASE_FILE, 0, null);
} catch (SQLiteException e) {
// try again by deleting the old db and create a new one
if (context.deleteDatabase(DATABASE_FILE)) {
mDatabase = context.openOrCreateDatabase(DATABASE_FILE, 0,
null);
}
}
mDatabase.enableWriteAheadLogging(); ****
// mDatabase should not be null,
// the only case is RequestAPI test has problem to create db
if (mDatabase == null) {
mInitialized = true;
notify();
return;
Ответ 2
Попробуйте проверить код, вызывающий android.webkit.WebViewDatabase.initDatabase()
У него есть обработка ошибок или любая проблема с открытием базы данных в определенных ситуациях?
У вас есть обработка ошибок/обнаружение объектов? Можете ли вы показать несколько строк кода?
Ответ 3
Я проверил предоставленные ссылки, исходные коды Android, внутреннюю аналитику сбоев и, похоже, проблема существует только для android 4.0 - 4.0.4. Я опробовал свое предложение на Android 2.3.6, 4.0.3, 4.4.2, и это кажется правильным. Итак, я закончил со следующим обходным решением для этой проблемы:
package com.android.example;
import android.content.Context;
import android.os.Build;
public class WebViewUtil {
private static final String WEBVIEW_DATABASE_FILE = "webview.db";
public static boolean isWebViewCorrupted(Context context) {
try {
int currentSdk = Build.VERSION.SDK_INT;
if (currentSdk == Build.VERSION_CODES.ICE_CREAM_SANDWICH
|| currentSdk == Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
try {
context.openOrCreateDatabase(WEBVIEW_DATABASE_FILE, 0, null);
} catch (Throwable t) {
// try again by deleting the old db and create a new one
context.deleteDatabase(WEBVIEW_DATABASE_FILE);
context.openOrCreateDatabase(WEBVIEW_DATABASE_FILE, 0, null);
}
}
return false;
} catch (Throwable t) {
}
return true;
}
}