HTML localStorage is null on Android when using webview

20,931

Have you tried just enabling the setting as per this answer : https://stackoverflow.com/a/5934650/85472

Share:
20,931
Admin
Author by

Admin

Updated on July 05, 2022

Comments

  • Admin
    Admin almost 2 years

    I am trying to use localstorage from my local web APP, here is the WebView initialization part:

    static class MyWebView extends WebView
            {
                public MyWebView(Context context)
                {
                super(context);
    
                this.getSettings().setJavaScriptEnabled(true);
    
                //enable support for DOM Storage and Database
                this.getSettings().setDatabaseEnabled(true);
                this.getSettings().setDomStorageEnabled(true);
    
    
                String databasePath = context.getDir("database", Context.MODE_PRIVATE).getPath();
    
                this.getSettings().setDatabasePath(databasePath);
    
    
                this.setVerticalScrollbarOverlay(true);
            } }
    

    and Here is the test app on JavaScript:

    function testStorage() 
        {
            var storage = window.localStorage;
            if (storage) {
                try {
                    storage.setItem("name", "Hello World!"); //saves to the database, “key”, “value”
                } catch (e) {
    
                        alert(e.message); //data wasn’t successfully saved due to quota exceed so throw an error
                }
                document.write(storage.getItem("name")); //Hello World!
                storage.removeItem('name'); 
            }
            else {
                alert('Your browser does not support HTML5 localStorage. Because Storage is' + storage);
            }
        }
    

    but the problem is that the localStorage is always null, I have checked the permissions and created a WebChromeClient with

    @Override
                public void onExceededDatabaseQuota(String url,
                        String databaseIdentifier,
                        long currentQuota,
                        long estimatedSize,
                        long totalUsedQuota,
                        WebStorage.QuotaUpdater quotaUpdater)
                {
                    quotaUpdater.updateQuota(estimatedSize * 2);
                }
    

    which never gets called. Anyone knows why?

    Thanks