【问题标题】:Android WebView get localstorage valuesAndroid WebView 获取本地存储值
【发布时间】:2019-05-07 11:36:51
【问题描述】:

我使用Android WebView加载一个URL,Web应用使用缓存并将值存储在浏览器Application -> local Storage -> www.123xyz.com -> Scoring

每当Web应用程序中的活动发生时,它都会存储在本地存储中,它工作正常。

现在我想检索该本地存储值并将其存储在 android 的 SQLite 数据库中。如果 Web 应用程序没有正确执行,那么我想从 SQLite 数据库中检索值并将其设置在本地存储的 Scoring Key 中

    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setDomStorageEnabled(true);
    mWebView.getSettings().setDatabaseEnabled(true);
    Log.e("Database",getFilesDir().getParentFile().getPath()+"/databases/");
    mWebView.getSettings().setDatabasePath(getFilesDir().getParentFile().getPath()+"/databases/");
    mWebView.getSettings().setAppCacheMaxSize(1024*1024*8);
    Log.e("Cache",getApplicationContext().getCacheDir()+"/scoring");
    mWebView.getSettings().setAppCachePath( getApplicationContext().getCacheDir()+"/scoring");
    mWebView.getSettings().setAllowFileAccess(true);
    mWebView.getSettings().setAppCacheEnabled(true);
    mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);

    String url= getResources().getString(R.string.scoringurl);
    mWebView.loadUrl(url);

更新:

现在我可以通过以下代码访问本地存储并检索值。现在我想每 30 秒或每当本地存储发生更改时获取此值。

有什么办法吗。我想它必须通过计时器来完成,并且不会使应用程序变慢,任何人都可以帮助我。

    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url) {
            view.evaluateJavascript("javascript:window.localStorage.getItem('scoring')", new ValueCallback<String>() {
                @Override public void onReceiveValue(String s) {
                    Log.e("OnRecieve",s);
                }
            });
            super.onPageFinished(view, url);
        }
    });

【问题讨论】:

  • 放置一个定期检查更改的计时器将完成任务。对吗?

标签: java android android-webview


【解决方案1】:

在 Override Method onConsoleMessage 上调用它,控制台中的每次更改都会调用此方法

    @Override
    public void onConsoleMessage(String message, int lineNumber, String sourceID) {
        view.evaluateJavascript("javascript:window.localStorage.getItem('scoring')", new ValueCallback<String>() {
            @Override 
            public void onReceiveValue(String s) {
                Log.e("OnRecieve",s);
            }
        });
        super.super.onConsoleMessage(message, lineNumber, sourceID);
    }

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 2016-09-16
    • 2018-06-23
    • 1970-01-01
    • 2012-01-13
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多