Extraño SQLiteException no en todos los dispositivos

Tengo un botón que cuando se pulsa abre la página de inicio de twitter en una webview (como una actividad). Estoy usando twitter4j versión 2.2.6 . El problema es que cuando hago clic en el emulador o mi Samsung Galaxy 2 funciona perfectamente witout cualquier error, pero cuando hago clic en el botón de mi samsung galaxia 3 GT-I9300 (y mis amigos mismo teléfono) me sale la siguiente excepción:

Android.database.sqlite.SQLiteException: no such table: password:, while compilando: SELECT username, password FROM password WHERE (host ==?) En android.database.sqlite.SQLiteCompiledSql.native_compile (Método Nativo) en android.database. Sqlite.SQLiteCompiledSql. (SQLiteCompiledSql.java:68) en android.database.sqlite.SQLiteProgram.compileSql (SQLiteProgram.java:143) en android.database.sqlite.SQLiteProgram.compileAndbindAllArgs (SQLiteProgram.java:361) en android.database. Sqlite.SQLiteProgram (SQLiteProgram.java:127) en android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:94) en android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:53) en android.database.sqlite. SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.java:47) en android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.java:1684) en android.database.sqlite.SQLiteDatabase.queryWithFactory (SQLiteDatabase.java:1569) en android.database.sqlite .SQLiteDatabase.query (SQLiteDatabase.java:1525) en android.data Base.sqlite.SQLiteDatabase.query (SQLiteDatabase.java:1605) en android.webkit.WebViewDatabase.getUsernamePassword (WebViewDatabase.java:990) en android.webkit.BrowserFrame.handleMessage (BrowserFrame.java:589) en android.os.Handler .dispatchMessage (Handler.java:99) en android.os.Looper.loop (Looper.java:137) en android.webkit.WebViewCore $ WebCoreThread.run (WebViewCore.java:950) en java.lang.Thread.run Thread.java:856)

La webview es una actividad (extiende Actividad) tengo un montón de espacio libre en el punto de choque:

Total- 12187213824 libre- 4315947008

Mi configuración en el accidente:

FlipFont=0 compatScreenHeightDp=546 compatScreenWidthDp=320 compatSmallestScreenWidthDp=320 fontScale=0.93 hardKeyboardHidden=HARDKEYBOARDHIDDEN_YES keyboard=KEYBOARD_NOKEYS keyboardHidden=KEYBOARDHIDDEN_NO locale=en_US mcc=425 mnc=1 navigation=NAVIGATION_NONAV navigationHidden=NAVIGATIONHIDDEN_YES orientation=ORIENTATION_PORTRAIT screenHeightDp=615 screenLayout=SCREENLAYOUT_SIZE_NORMAL+SCREENLAYOUT_LONG_YES screenWidthDp=360 seq=46 smallestScreenWidthDp=360 textLayoutDirection=0 touchscreen=TOUCHSCREEN_FINGER uiMode=UI_MODE_TYPE_NORMAL+UI_MODE_NIGHT_NO userSetLocale=false 

Características del dispositivo:

 android.hardware.wifi android.hardware.location.network android.hardware.nfc android.hardware.location android.hardware.sensor.gyroscope android.hardware.screen.landscape android.hardware.screen.portrait android.hardware.wifi.direct android.hardware.usb.accessory android.hardware.bluetooth android.hardware.touchscreen.multitouch.distinct android.hardware.microphone android.hardware.sensor.light android.hardware.camera.autofocus android.software.live_wallpaper android.hardware.camera.flash android.hardware.telephony android.software.sip android.hardware.touchscreen.multitouch.jazzhand android.hardware.sensor.barometer android.hardware.usb.host android.hardware.touchscreen.multitouch android.hardware.sensor.compass android.hardware.faketouch android.hardware.camera com.sec.feature.minimode android.software.sip.voip android.hardware.sensor.proximity android.hardware.location.gps android.hardware.telephony.gsm android.hardware.camera.front com.nxp.mifare android.hardware.touchscreen android.hardware.sensor.accelerometer glEsVersion = 2.0 

AMBIENTE:

 getAndroidSecureContainerDirectory=/mnt/asec getCloudStorageDirectory=/mnt/sdcard/cloud getCloudStorageDirectoryPath=/mnt/sdcard/cloud getDataDirectory=/data getDownloadCacheDirectory=/cache getExternalStorageAndroidDataDir=/mnt/sdcard/Android/data getExternalStorageDirectory=/mnt/sdcard getExternalStorageDirectoryUsbHost=/mnt/sdcard/Storages/usb getExternalStorageState=mounted getRootDirectory=/system getSecureDataDirectory=/data getSystemSecureDirectory=/data/system isEncryptedFilesystemEnabled=false isExternalStorageEmulated=true isExternalStorageRemovable=false 

Permisos:

 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.GET_TASKS"/> 

En la webview no hice ninguna transacción sqllite o nada involucrado.

Ver mi respuesta sobre esta línea

No soy un usuario root (es decir, tengo los derechos de escritura)

El código que involucra la webview es:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try{ requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.twitter); mIntent = getIntent(); String url = (String)mIntent.getExtras().get("URL"); WebView webView = (WebView) findViewById(R.id.webview); WebSettings settings = webView.getSettings(); settings.setDatabaseEnabled(true); settings.setDatabasePath("/data/data/"+getPackageName()+"/databases"); settings.setDomStorageEnabled(true); settings.setJavaScriptEnabled(true); settings.setAllowFileAccess(true); settings.setSaveFormData(true); settings.setSavePassword(true); webView.setWebViewClient( new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { ... return false; } }); webView.loadUrl(url); }catch(Exception e){ e.printStackTrace(); } } public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { quotaUpdater.updateQuota(204801); } 

He encontrado estos enlaces que tiene alguna similitud:

  • SQLiteException: no hay tal tabla sólo en Motorola Plus?
  • Android WebView lanza SQLiteException
  • SQLiteException – sólo ocurre en algunos dispositivos
  • Http://www.anddev.org/networking-database-problems-f29/missing-table-in-sqlite-with-specific-version-of-desire-hd-t50364.html

He mirado en demasiados hilos durante una semana larga y estoy bastante frustrado por ello

¿Alguien tiene alguna idea? Gracias

Como resulta que tenía estas dos líneas en algún otro lugar en el código:

 context.deleteDatabase("webview.db"); context.deleteDatabase("webviewCache.db"); 

Estas líneas donde se supone que borrar el almacenamiento en caché de mi webview, pero esta línea sólo funcionó en dispositivos anteriores, en la galaxia 3 y tal vez otros dispositivos como resulta, la webview cuando se inicia no está creando estas bases de datos de nuevo la excepción sqlite fue porque Realmente no tienen una mesa …

Hay que tener cuidado con eso- la línea que escribí era engañosa:

"En la webview no he hecho ninguna transacción sqllite o nada implicado"

Este fallo es difícil de reproducir, pero estaba recibiendo exactamente la misma excepción (incluso mencionando "no such table: password") y podía reproducirlo yendo a una actividad, luego a una segunda actividad y luego abriendo una WebView en una , Que muestra HTML que contiene el siguiente elemento de formulario:

 <input type="password" name="pword" id="pword"> 

La eliminación de ese type="password" de ese elemento de forma evitó que se estrellara.

El WebView intenta guardar contraseñas para uso posterior, en un sqlite db. No puedo decir con seguridad, pero imagino que esto no es un comportamiento deseable para la mayoría de los desarrolladores, así que si lo deseas, puedes desactivar esta función llamando a lo siguiente en la instancia WebSettings de WebView:

 myWebView.getSettings().setSavePassword(false); 

Esta respuesta también podría brillar algo sobre este problema: Fuga de memoria en WebView

Señalan otra solución a esto, que es:

 webView = new WebView(getApplicationContext()); 
  • ¿Cómo arreglar NoClassDefFoundError en twitter4j usando Android Studio?
  • Twitter4j. Realizar consultas y filtrar mensajes por #hashtag
  • Cheque Quien estoy siguiendo a través de Twitter4j
  • Twitter4j Call back issue - apertura de la actividad de devolución de llamada en el navegador
  • Twitter4j: Obtener la lista de respuestas para un determinado tweet
  • Inicie sesión en Twitter para mostrar el error "android.os.NetworkOnMainThreadException"
  • Ejemplo de xAuth de Twitter de Android con twitter4j
  • ofuscación androide Proguard con twitter4j
  • Método retrieveRequestToken aumenta "La comunicación con el proveedor de servicios falló: null"
  • Integración de Twitter con oauth y twitter4j
  • Twitter aplicación sólo la autenticación java android con twitter4j
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.