2013-07-04 11 views
13

ricevo da Google Play msg che la mia app crash, nel msgWebView incidente NullPointerException android.webkit.WebViewDatabase.initDatabase (WebViewDatabase.java:234)

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) 

non trovo in google o in Stackloflow analogo probloem quindi non so perché questo crach, ma so che causa da webview.

+0

possiamo vedere l'intera traccia dello stack? c'è un Causato da? – peshkira

+0

Questo è tutto il rapporto – idan

+0

Potresti postare codice sorgente? – ArturSkowronski

risposta

0

Prova a verificare qualsiasi codice che chiami android.webkit.WebViewDatabase.initDatabase() Ha la gestione degli errori o problemi con l'apertura del database in determinate situazioni?

Avete gestione errori/rilevamento oggetti? Puoi mostrare alcune righe del codice?

1

sembra essere lo stesso di questo problema qui (più potenziale soluzione):

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

Ho trovato il codice per WebViewDatabase qui (non è esattamente la stessa versione, ma c'è abbastanza contesto per ottenere foto):

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

Se si guarda il codice per initDatabase(), c'è un potenziale NPE sulla linea che ho segnato con "****". Si noti che i seguenti controlli di linea per NULL, in modo che sembra essere un po 'stupido:

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

ho ispezionato forniti link, codici source Android, analisi di crash interne e sembra che il problema esiste solo su Android 4,0-4,0 .4. Ho testato il mio suggerimento su Android 2.3.6, 4.0.3, 4.4.2 e sembra essere corretto. Così ho finito con la seguente soluzione per questo problema:

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