【问题标题】:Save data to LocalStorage and then retrieve it using android Java将数据保存到 LocalStorage,然后使用 android Java 检索它
【发布时间】:2020-05-06 14:45:49
【问题描述】:

我正在使用WebView 在我的android 应用程序中加载本地网页,而我的web page 有一个按钮(比如说“btnA”)。当用户点击btnA时,javascript函数被调用,将deviceID保存在浏览器的localstorage中。

现在我想问几件事:

  1. 我在保存 deviceID 时显示警报,并且该警报在应用程序中工作正常,但是保存后如何在手机浏览器中查看 deviceID?我在手机中使用 Chrome,我尝试转到 Chrome > 设置 > 站点设置 > 存储,但没有任何内容。
  2. 当用户点击 btnA 时,我想在每 5 分钟后运行一个后台 service,它会达到一个 api,并且我需要将 deviceID(存储在 localStorage 中)作为 api 的 parameter 传递。如何在我的 android 应用程序中从 localstorage 获取该设备 ID,以便我可以将其作为参数传递?

这就是我在应用程序中加载 web 视图的方式:

webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl("file:///android_res/raw/index.html");

这是我的网页:

<!DOCTYPE html>
<html>

<head>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
    <meta content="utf-8" http-equiv="encoding">
</head>

<body>
    <button type="submit" value="Click Me" onclick="saveToLocalStorage()">Click Me</button>
    <script src="./app.js" type="text/javascript"></script>
</body>

</html>

这是我的app.js

function saveToLocalStorage() {
    var generatedString = randomString(9, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
    if(localStorage.getItem("deviceID") == null){
        localStorage.setItem("deviceID", generatedString);
        alert("DeviceID saved.")
    }

}

function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
}

【问题讨论】:

    标签: javascript android webview


    【解决方案1】:

    你可以创建一个Javascript接口:

    public class JavaScriptInterface {
        Context mContext;
    
        /** Instantiate the interface and set the context */
        JavaScriptInterface(Context c) {
            mContext = c;
        }
    
        @JavascriptInterface
        public void deviceId(String deviceId) {
            // Do whatever you want with the deviceId
        }
    }
    

    并将其传递给 webview:

    webView.addJavascriptInterface(new JavaScriptInterface(this), "injectedObject");
    

    然后您可以将该 id 发送到本机应用程序:

    <script type="text/javascript">
        function sendDeviceId() {
            injectedObject.deviceId(localStorage.getItem("deviceID"));
        }
    </script>
    

    通过从网站内部调用sendDeviceId(),本机应用程序应该会收到存储的 deviceId。这可以在saveToLocalStorage() 方法的末尾完成。

    要检查本地存储,您可以在智能手机上的 chrome 浏览器中打开该网站,然后将其连接到计算机并从计算机访问 chrome://inspect/#devices。这应该显示您打开的选项卡,并且那里有一个检查链接,这将打开网站检查器,您可以在应用程序选项卡中检查该网站的本地存储。

    【讨论】:

    • 这就像一个魅力。你能回答我的第一个问题吗?即,我在哪里可以看到此 ID 存储在手机浏览器的 localStorage 中?因为我确实导航到了手机的 chrome localStorage,但那里什么也没有。
    • 我正在加载的网页存储在 android_res 文件夹中,如何在 Chrome 上打开它?
    • 我还以为是你的局域网或公共网站。如果它在资源中,我想我会将网站复制到计算机上的网络服务器中并从移动设备的 chrome 浏览器中访问它,我知道这很混乱,但我想不出更好的方法。
    猜你喜欢
    • 2021-06-29
    • 2018-10-29
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2014-09-23
    • 2021-05-23
    • 1970-01-01
    • 2012-05-03
    相关资源
    最近更新 更多