Android和H5进行数据交互,Android获取H5Input框中的内容

项目中嵌入了H5 页面,这个时候就需要拿到H5 input中的内容进行数据传递,先看实现的效果图

这就是实现的效果,页面效果什么的可以忽略不计了,主要看功能,下面贴代码

首先看MainActivity的布局,很简单,就是一个WebView

<WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/ll_top" />

然后是网页内容,这个网页内容,一般的是你们前端给你们写的 ,只是你们两个人确定好方法就可以,这里我直接放在本地了

<!DOCTYPE >
<html xmlns="http://www.w3.org/1999/xhtml" debug="true">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="viewport" content="target-densitydpi=device-dpi"/>
    <script type="text/javascript">
    function init()
           {
               var testVal = document.getElementById('mytextId').value;
               AndroidFunction.showToast(testVal);
           }

    </script>
</head>
<body>
<div style="float: left;width: 50%;">
    <input type="text" style="width: 180px;"
           name="myText" id="mytextId"/>

</div>
<div style="clear: both;height: 3px;"></div>
<div>
    <input value="submit" type="button" name="submit"
           id="btnSubmit" onclick="javascript:return init();"/>
</div>
</body>
</html>

再就是MainActivity.java的具体实现和方法

public class MainActivity2 extends AppCompatActivity {

    private WebView webView;
    private LinearLayout ll_root;
    private EditText et_user;
    private ImageView iv_btn_return;
    final Handler myHandler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_user = (EditText) findViewById(R.id.et_user);
        webView = (WebView) findViewById(R.id.webView);
        initWebView();
    }

    //初始化WebView

    private void initWebView() {
        //不跳转到其他浏览器
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });


        final JavaScriptInterface myJavaScriptInterface
                = new JavaScriptInterface(this);
        webView.getSettings().setLightTouchEnabled(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");
        webView.loadUrl("file:///android_asset/JavaAndJavaScriptCall2.html");
    }

    //按钮的点击事件
    public void click(View view) {
    }

    //在页面销毁的时候将webView移除
    @Override
    protected void onDestroy() {
        super.onDestroy();
//        ll_root.removeView(webView);
        webView.stopLoading();
        webView.removeAllViews();
        webView.destroy();
        webView = null;
    }

    public class JavaScriptInterface {
        Context mContext;

        JavaScriptInterface(Context c) {
            mContext = c;
        }

        @JavascriptInterface
        public void showToast(String webMessage) {
            final String msgeToast = webMessage;
            myHandler.post(new Runnable() {
                @Override
                public void run() {
                    // This gets executed on the UI thread so it can safely modify Views
                    Log.e("toast", "msgToast:" + msgeToast);
                    Toast.makeText(mContext, "msgToast:" + msgeToast, Toast.LENGTH_SHORT).show();
                }
            });

            Toast.makeText(mContext, webMessage, Toast.LENGTH_SHORT).show();
        }
    }
}

此博客不太规范,也没有进行排版美化,仅用来记录自己工作中的问题和学习使用

posted @ 2018-03-22 13:26  丁先森  阅读(6778)  评论(0编辑  收藏  举报