【问题标题】:Android Service reads localStorage?Android Service 读取 localStorage?
【发布时间】:2013-08-15 08:27:52
【问题描述】:

我为 Android 开发了一个 PhoneGap 应用程序。 该应用程序由 webapp (HTML/jQuery) 和一个由 webapp 启动的 后台服务 (Java 代码) 组成。

这个 webapp 像

一样写入 window.localStorage
    <script>
       window.localStorage.setItem("name","MyName");
    </script>

是否可以从我的 Java 代码中读取 localStorage 中的这个 name

【问题讨论】:

    标签: java android cordova local-storage


    【解决方案1】:

    这是可能的。要执行 JavaScript 并获得响应,您可以执行以下操作:

    在代码中定义 JavaScript 回调接口:

    class MyJavaScriptInterface {
        public void someCallback(String jsResult) {
             // this will be passed the local storage name variable
        }
    }
    

    将此回调附加到您的 WebView:

    MyJavaScriptInterface javaInterface = new MyJavaScriptInterface();
    webView.addJavascriptInterface(javaInterface, "HTMLOUT");
    

    从脚本运行你的 JavaScript 调用 window.HTMLOUT.someCallback:

    webView.loadUrl("javascript:( function () { var name = window.localStorage['name']; window.HTMLOUT.someCallback(name); } ) ()");
    

    注意 - window.localStorage['name']window.localStorage.getItem('name') 相同

    This post here on stackoverflow helped me

    您可能需要使用super.webView.addJavascriptInterfacesuper.addJavascriptInterface 来添加接口。您可能需要使用 super.webView.loadUrlsuper.loadUrl 来调用它。这完全取决于您将从哪里调用这些。

    【讨论】:

    • 你好@罗斯!谢谢你的回答!
    • @Ross 我知道这是一个老话题,但你能指出一个在 Cordova 插件中完全实现此方法的仓库吗?我正在尝试修改 Cordova 设备插件以使用此代码,但我不断收到错误消息。我几乎不知道任何Java。我很想看到这个代码的一个工作示例。 :D
    • @user1002379 我不知道有任何插件使用这种方法。你看过这些 SO 帖子 herehere 吗?您是否尝试读取 Java 中 Cordova 设备插件提供的值?
    • 但无法从服务访问 webview
    【解决方案2】:

    使用cordova-plugin-nativestorage插件读取android java文件中的localstorage。

    适用于IOS、Android平台

    这个插件使用nativeStorage

    Cordova 语法:

    NativeStorage.setItem("reference", obj, setSuccess, setError);
    function setSuccess(obj){
    }
    function setError(obj){
    }
    

    机器人 JAVA:

    SharedPreferences sharedPreferences = getSharedPreferences("MainActivity", MODE_PRIVATE);
    System.out.println("********---------    shared pref values...   " +  sharedPreferences.getString("myid", "no value"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      相关资源
      最近更新 更多