Android - 直接从Java读取HTML5 localStorage数据

时间:2012-02-25 21:28:27

标签: android local-storage

我有一个简单的Android应用程序,它有一个WebView。 WebView设置为浏览到使用JavaScript的localStorage功能的站点。

我已经将我的WebSettings设置为允许DomStorage:

webSettings.setJavaScriptEnabled(true);
ebSettings.setDomStorageEnabled(true);

String dbPath = this.getApplicationContext().getDir("database", MODE_PRIVATE).getPath();        
webSettings.setDatabasePath(dbPath);

我需要的是一种方法,我的Java代码可以读取使用localStorage机制存储的变量,即:

JavaScript执行此操作:

    var storage = window.localStorage;
    storage.setItem("name", "Hello World!");

如何从Java代码中读取localStorage中“name”的值?

4 个答案:

答案 0 :(得分:2)

是的,可以在java(Android)中读取localStorage值。

使用此插件https://www.npmjs.com/package/cordova-plugin-nativestorage 使用本机存储。

- 因为我们必须在cordova中设置值

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

在Anroid Java File中获取此值:

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

答案 1 :(得分:0)

yourWebView.setWebChromeClient(new WebChromeClient(){
      public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        Log.d(tag, "That's my local storage value =" + message);
        return false;
      };
    });
(...)
    yourWebView.loadURL("javascript:alert(localStorage.getItem(\"name\"))");

答案 2 :(得分:0)

在您的活动中

webView.addJavascriptInterface(myInterface, "JSInterface");

Javascript接口类

class myInterface
{

    @JavascriptInterface
    public void getVariable(string fromLocalStorage)
    {
    //your code
    }

}

在javascript中

window.JSInterface.getVariable(localStorage.getItem("variableName"))

答案 3 :(得分:0)

要写入数据:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
     webView.evaluateJavascript("localStorage.setItem('"+ key +"','"+ val +"');", null);
} else {
     webView.loadUrl("javascript:localStorage.setItem('"+ key +"','"+ val +"');");
}

要读取和警报数据:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
     webView.evaluateJavascript("window.alert(localStorage.getItem('"+ key +"'));", null);
} else {
     webView.loadUrl("javascript:window.alert(localStorage.getItem('"+ key +"'));");
}

请记住启用Android WebvView

的JavaScript
webView.getSettings().setJavaScriptEnabled(true);