2013-07-04 10 views
13

I odbieranie od Google Play wiad że moja aplikacja katastrofy w MSGWebView krach 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) 

nie znajdę w google lub w stackoverflow podobne probloem, więc nie wiem, dlaczego to crach, ale wiem, że przyczyną przez webview.

+0

Czy możemy zobaczyć cały ślad stosu? czy istnieje przyczyna? – peshkira

+0

To wszystko jest raportem – idan

+0

. Czy mógłbyś opublikować kod źródłowy? – ArturSkowronski

Odpowiedz

0

Spróbuj sprawdzić dowolny kod, który wywołuje android.webkit.WebViewDatabase.initDatabase() Czy ma obsługę błędów lub jakiś problem z otwieraniem bazy danych w określonych sytuacjach?

Czy masz obsługę błędów/wykrywanie obiektów? Czy możesz pokazać kilka linii kodu?

1

wydaje się być taki sam, jak ten problem tutaj (plus potencjalne obejście):

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

znalazłem kod WebViewDatabase tutaj (nie jest to dokładnie ta sama wersja, ale jest na tyle kontekst dostać obraz):

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

Jeśli spojrzeć na kod dla initDatabase(), istnieje potencjalne NPE na linii że oznaczonym „****”. Należy zauważyć, że w wyniku kontroli linii na NULL, więc wygląda na trochę głupie:

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

Mam sprawdzony przewidzianych linki, kody źródłowe android, wewnętrzne analityki awariach i wydaje się, że problem istnieje tylko na Android 4.0 - 4.0 .4. Przetestowałem moją propozycję na Androida 2.3.6, 4.0.3, 4.4.2 i wydaje się, że jest poprawna. Więc skończyłem z następującym obejściem tego problemu:

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; 
    } 
} 
Powiązane problemy