2013-11-22 71 views
2

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

事情是,最近我们决定从PhoneGap转移到原生Android应用程序。但有一件事我需要解决:

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

在此先感谢!

回答

0

普拉卡什向我指出正确的方向,但也有一些东西丢失:

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 
    } 
} 

有一些设置来配置web视图:

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"); 
} 

希望这会帮助别人一天

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来调用它。这一切都取决于你将从哪里调用。