Vraag webview crash NullPointerException android.webkit.WebViewDatabase.initDatabase (WebViewDatabase.java:234)


Ik krijg van google play-bericht dat mijn app vastloopt in het bericht

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)

Ik vind niet in google of in stackoverflow vergelijkbaar probloem dus ik weet niet waarom deze crach, maar ik weet die oorzaak door webview.


13
2017-07-04 21:06


oorsprong


antwoorden:


Lijkt hetzelfde te zijn als dit probleem hier (plus mogelijke oplossing):

https://code.google.com/p/android/issues/detail?id=35204

Ik vond de code voor WebViewDatabase hier (het is niet precies dezelfde versie, maar er is voldoende context om de afbeelding te krijgen):

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

Als u de code van initDatabase () bekijkt, is er een potentiële NPE op de regel die ik heb gemarkeerd met "****". Merk op dat de volgende regel voor NULL controleert, dus het ziet er een beetje dom uit:

 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;

1
2018-05-01 00:31



Probeer een code te controleren die belt android.webkit.WebViewDatabase.initDatabase() Heeft het een foutafhandeling of een probleem met het openen van de database in bepaalde situaties?

Heeft u foutafhandeling / objectdetectie? Kun je een paar regels van de code laten zien?


0
2018-01-23 10:15



Ik heb de opgegeven links, Android-broncodes, interne crashanalyses geïnspecteerd en het lijkt erop dat het probleem alleen op Android 4.0 - 4.0.4 bestaat. Ik heb mijn suggestie getest op Android 2.3.6, 4.0.3, 4.4.2 en het lijkt correct te zijn. Dus eindigde ik met de volgende oplossing voor dit probleem:

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;
    }
}

0
2017-07-30 08:33