problema de base de datos de acceso a HTML5 WebView HTML
trabajo en una aplicación que incorpora un WebView y mostrar una página HTML5.
cuando se abre la página html en la base de datos de Android chrome Browser.the fue crear normal.
- Falta el nombre de archivo para openFileChooser Android 4.4.4
- La vista web de Android no reproduce video, jwembedder
- Cómo jugar auto iframe youtube en webview android
- Cómo incrustar una fuente personalizada en la aplicación de Android (WebView)
- Superposición azul de OnClick
pero cuando ejecuto esta aplicación, la base de datos no puede crear. parece que la página html no puede crear la base de datos en WebView.
¿Alguien sabe por qué?
aquí está mi código de actividad:
public class efan_NewsReader extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebView myWebView=(WebView)findViewById(R.id.my_webview); myWebView.setWebViewClient(new WebViewClient()); WebSettings settings = myWebView.getSettings(); settings.setJavaScriptEnabled(true); settings.setDomStorageEnabled(true); settings.setDatabaseEnabled(true); settings.setAppCacheEnabled(false); myWebView.loadUrl("http://10.10.35.47:8080/html5test/test.htm"); }}
aquí está mi código fuente de la página HTML5:
<html manifest="mymanifest.manifest"> <head> <meta http-equiv="Content-Type" content="text/html; content="no-cache" charset=utf-8" /> <script type="text/javascript" src="js/jquery-1.6.1.min.js"></script> <script> $(document).ready(function(){ databaseTest(); }); function databaseTest(){ //open database var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS testHtml (id unique, contentText)'); tx.executeSql('INSERT INTO testHtml (contentText) VALUES ("insert data test!")'); }); db.transaction(function(tx){ tx.executeSql('SELECT * FROM testHtml',[],function(tx,result){ var len=result.rows.length; var msg = "<p>Found rows: " + len + "</p>"; $("#testinfo").append(msg); },null); }); } </script> </head> <body> <div>here is test info:</div> <div id="testinfo"></div> </body>
- Inyección de puente Javascript en WebView
- Cuando invoco una función Java desde mi código Javascript, WebView se bloquea. ¿Por qué?
- Cómo cargar una página web externa dentro de WebView
- Android webview loadDataWithBaseURL cómo cargar imágenes de los activos?
- Guardar imagen desde WebView
- Cargando el archivo html local en webView android
- android-O: caída de la aplicación con la vista web
- Fuente personalizada para webview android
Tratar :
settings.setDatabaseEnabled(true); String dbPath = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); settings.setDatabasePath(dbPath);
Y en WebChromeClient:
myWebView.setWebChromeClient(new WebChromeClient() { @Override public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { quotaUpdater.updateQuota(estimatedSize * 2); } }
Deberia estar bien 😉
nuevo WebChromeClient () estaba lanzando un error de constructor así que lo hice de esta manera. WebView privado WebView;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_web); webView = (WebView) findViewById(R.id.webView1); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDatabaseEnabled(true); webView.getSettings().setDomStorageEnabled(true); //String sDataPath = "/data/data/" + webView.getContext().getPackageName() + "/databases/"; String sDataPath = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); webView.getSettings().setDatabasePath(sDataPath); webView.getSettings().setDatabaseEnabled(true); webView.getSettings().setSavePassword(true); webView.getSettings().setAllowContentAccess(true); webView.getSettings().setAllowFileAccess(true); webView.setWebViewClient(new Callback()); webView.setWebChromeClient(new webChromeClient()); webView.loadUrl("http://www.yahoo.com"); } private class Callback extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return (false); } } private class webChromeClient extends WebChromeClient { @Override public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { quotaUpdater.updateQuota(5 * 1024 * 1024); } }
Es probable que la cuota predeterminada sea 0, por lo que onExceededDatabaseQuota
es un onExceededDatabaseQuota