如何在Android中将Javascript返回值转换为String

时间:2016-05-10 05:59:05

标签: javascript java android

我在Android工作,我是这个开发人员的新手。

我学习并开始使用Eclipse IDE开发我的应用程序。

我正在显示带有URL的webView,然后我尝试调用JS函数。此函数返回一个字符串值。

我能够在警报中显示它,但我希望将其作为字符串值。我们怎么做到这一点?

我在转换为字符串的行上遇到类型不匹配错误。

MY JS功能:

function fing() {
    return "welcome today"
}

我的MainActivity.Java

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();

        webView = (WebView) findViewById(R.id.webView1);
        generate = (Button) findViewById(R.id.generate);
        go = (Button) findViewById(R.id.go);
        webView.setVisibility(View.GONE);
        generate.setVisibility(View.GONE);

        webView.setWebChromeClient(new WebChromeClient() {              
            @Override
            public boolean onJsAlert(WebView view, String url, String message,JsResult result) {
                        Log.d("LogTag from js call method", message);
                        result.confirm();
                        return true;
               }
        });     

        go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                webView.getSettings().setJavaScriptEnabled(true);
                go.setVisibility(View.GONE);
                webView.setVisibility(View.VISIBLE);
                generate.setVisibility(View.VISIBLE);

                webView.loadUrl("myUrl");       
            }
        }); 

        generate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {    
                webView.loadUrl("javascript:alert(fing())");      
                String retStr = webView.loadUrl("javascript:alert(fing())");//Here type mis match error
                System.out.println(retStr)              
            }
        }); 

2 个答案:

答案 0 :(得分:0)

基本上你通过使用javascript bridge在webview javascript环境到java android之间交换字符串值。请看示例

http://developer.android.com/guide/webapps/webview.html

如果你不能使用上面的javascript桥

试试

javascript - >

function fing() {
return "welcome today"
}

Webview加载脚本javascript:alert(fing().stringyfy())"

答案 1 :(得分:0)

你不应该以你在上面尝试过的方式做到这一点。

为了使JS调用从该函数返回一个值,将generate.setOnClickListener代码更改为如下所示,

    generate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {    
            webView.loadUrl("javascript:alert(fing())");  
        }
    }); 

然后,您还应该更改以下部分以将该返回值分配给String,

    webView.setWebChromeClient(new WebChromeClient() {              
        @Override
        public boolean onJsAlert(WebView view, String url, String message,JsResult result) {
                    Log.d("LogTag from js call method", message);
                    str = message;
                    result.confirm();
                    return true;
           }
    });     

这应该已经在你的Logcat控制台中,因为你的代码已经有了。

如果没有,您需要仔细检查webChromeClient,如果它在同一webView对象的Activity中的某个位置再次启动。

注意:

您必须在Activity中创建str(String)变量,该变量在onJSAlert方法中指定。

希望这会有所帮助。