从PhoneGap升级到Native

时间:2013-11-22 14:01:29

标签: android mobile cordova local-storage

我有一个PhoneGap应用程序,我使用HTML5 LocalStorage,因此保存用户数据(如用户令牌,用户名等)。

问题是,最近我们决定从PhoneGap迁移到Native Android应用程序。但有一件事我需要解决:

是否可以使用java代码从HTML5 LocalStorage获取数据?我们不希望用户在更新后注销,因此我需要一种方法从该LocalStorage获取用户令牌并将其保存在SharedPreferences中。

提前致谢!

2 个答案:

答案 0 :(得分: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");

 Run your JavaScript calling window.HTMLOUT.someCallback from the script:

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

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

相同

这篇关于stackoverflow的帖子帮助了我

您可能需要使用super.webView.addJavascriptInterface或super.addJavascriptInterface来添加界面。您可能需要使用super.webView.loadUrl或super.loadUrl来调用它。这一切都取决于你打算从哪里打电话。

答案 1 :(得分:0)

prakash指出我正确的方向,但有一些事情缺失:

public class MyJavaScriptInterface { //the class and the callbacks must be public
    @JavascriptInterface //this is needed for android 4.2 and above
    public void someCallback(String jsResult) {
        // this will be passed the local storage name variable
    }
}

要为webView配置一些设置:

public void importPhoneGapUser() {
    String databasePath = getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
    String pathToCache = getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();

    WebView mAuthWebView = new WebView(this);
    WebSettings webSettings = mAuthWebView.getSettings();

    webSettings.setDatabasePath(databasePath);
    webSettings.setAppCachePath(pathToCache);
    webSettings.setGeolocationDatabasePath(databasePath);

    webSettings.setAppCacheMaxSize(5 * 1048576);

    webSettings.setAppCacheEnabled(true);
    webSettings.setDatabaseEnabled(true);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);

    mAuthWebView.addJavascriptInterface(new MyJavaScriptInterface (), "JsInterface");

    //i wasn't able to run JS through 'javascript:' protocol, so i had to use a HTML file
    mAuthWebView.loadUrl("file:///android_asset/import_auth.html");
}

希望有一天能帮到某人