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

2 Solutions collect form web for “Extraño SQLiteException no en todos los dispositivos”

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()); 
  • Problema con OAuth, Twitter y Android: falla en la comunicación http con el servidor
  • Android: Inicia sesión con Twitter usando Twitter4J
  • Twitter aplicación sólo la autenticación java android con twitter4j
  • Integración de Twitter con oauth y twitter4j
  • Twitter4j getOAuthRequestToken () con la URL de devolución de llamada falla en Android?
  • Integración de Twitter4j a través de Android Studio
  • SignPost o Twitter4j para iniciar sesión con Twitter (OAuth)?
  • La conexión de twitter falló
  • ¿Cómo utilizar Twitter4j api para responder en un tweet?
  • ¿Cómo puedo obtener una línea de tiempo pública de Twitter sin autenticación de usuario usando Twitter4j?
  • Twitter4J + Android: El desafío de autenticación es una excepción nula
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.