Android開(kāi)發(fā)之WebView與js的數(shù)據(jù)傳遞-創(chuàng)新互聯(lián)

在Android開(kāi)發(fā)中不可避免的會(huì)出現(xiàn),使用一個(gè)WebView來(lái)顯示一個(gè)h6頁(yè)面。如果僅僅只是顯示h6頁(yè)面,這不需要特殊的處理,但是很多情況下會(huì)出現(xiàn),js和WebView的交互。比如:將html表單中的數(shù)據(jù),傳遞到Activity中,在Activity中對(duì)數(shù)據(jù)校驗(yàn),再上傳到服務(wù)器。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),綠春企業(yè)網(wǎng)站建設(shè),綠春品牌網(wǎng)站建設(shè),網(wǎng)站定制,綠春網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,綠春網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

    那么js和WebView如何進(jìn)行的交互的呢?

    創(chuàng)建AndroidHtml項(xiàng)目。主要代碼如下:

MainActivity.java:

    private WebView mWebView;
    public static final String URL_TEST="file:///android_asset/index.html";

    @SuppressLint("JavascriptInterface")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (WebView) findViewById(R.id.webView);
        WebSettings settings = mWebView.getSettings();
        settings.setJavaScriptEnabled(true);

        mWebView.loadUrl(URL_TEST);
        //addJavascriptInterface這個(gè)方法中有兩個(gè)參數(shù),第一個(gè)參數(shù)是添加一個(gè)對(duì)象,這個(gè)對(duì)象中封裝了在js中要調(diào)用的native方法,第二個(gè)參數(shù)是告訴js對(duì)象的名稱以便于調(diào)用native方法
        mWebView.addJavascriptInterface(this,"zzh");//
    }

    @JavascriptInterface//android 4.2之上的版本需要加上這個(gè)注解,表示將這個(gè)方法暴露給js調(diào)用
    public void callAndroidNativeMethod(String str){
        Log.d("MainActivity","---方法被執(zhí)行了!??!-");
        Toast.makeText(this, "---"+str, Toast.LENGTH_LONG).show();
    }

注解@JavascriptInterface注解在Android版本4.2之上必須要加上。Google官方的解釋是

Caution: If you've set your targetSdkVersion to 17 or higher, you must add the @JavascriptInterface annotation to any method that you want available to your JavaScript (the method must also be public). If you do not provide the annotation, the method is not accessible by your web page when running on Android 4.2 or higher.

index.html:

<!DOCTYPE html>
<HTML lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <script type="text/javascript" language="javascript">
            function callAndroidNativeMethod(){
                window.zzh.callAndroidNativeMethod("js中的數(shù)據(jù)傳遞到了Android中了");
            }
        </script>
    </head>
    <body>
        <button onclick="callAndroidNativeMethod()">點(diǎn)擊調(diào)用Java代碼</button>
    </body>
</HTML>

activity_main.xml中的布局是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zzh.androidhtml.MainActivity">
    <Button
        android:id="@+id/button"
        android:text="Java調(diào)用js方法"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <WebView
        android:id="@+id/webView"
        android:layout_below="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>
</RelativeLayout>

好了,上面就是js中如何調(diào)用Android Native方法。下面來(lái)說(shuō)說(shuō)Android Native中怎么調(diào)用js方法(要注意Native中調(diào)用js方法來(lái)處理Android中的業(yè)務(wù)邏輯的效率差,不建議使用此方式處理Android業(yè)務(wù)邏輯,但是也要知道如何使用)。

private WebView mWebView;
public static final String URL_TEST="file:///android_asset/index.html";

@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mWebView = (WebView) findViewById(R.id.webView);
    WebSettings settings = mWebView.getSettings();
    settings.setJavaScriptEnabled(true);

    mWebView.loadUrl(URL_TEST);
    mWebView.addJavascriptInterface(this,"zzh");

    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mWebView.loadUrl("javascript:callJavaScriptMethod()");
        }
    });
}

@JavascriptInterface//android 4.2之上的版本需要加上這個(gè)注解,表示將這個(gè)方法暴露給js調(diào)用
public void callAndroidNativeMethod(String str){
    Log.d("MainActivity","---方法被執(zhí)行了?。。?");
    Toast.makeText(this, "---"+str, Toast.LENGTH_LONG).show();
}

index.html文件比較簡(jiǎn)單

<!DOCTYPE html>
<HTML lang="zh-CN">
<head>
    <meta charset="utf-8">
    <script type="text/javascript" language="javascript">
            function callAndroidNativeMethod(){
                window.zzh.callAndroidNativeMethod("js中的數(shù)據(jù)傳遞到了Android中了");
            }
            function callJavaScriptMethod(){
                document.getElementById("content").innerHTML += "<br\>java調(diào)用了js函數(shù)";
            }
    </script>
</head>
<body>
<button onclick="callAndroidNativeMethod()">點(diǎn)擊調(diào)用Java代碼</button>
<div id="content"></div>
</body>
</HTML>

 示例比較簡(jiǎn)單,注釋也寫(xiě)的比較清楚不做過(guò)多的講解,全憑自己領(lǐng)悟。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前標(biāo)題:Android開(kāi)發(fā)之WebView與js的數(shù)據(jù)傳遞-創(chuàng)新互聯(lián)
文章位置:http://muchs.cn/article0/dcgjoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、關(guān)鍵詞優(yōu)化、定制開(kāi)發(fā)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)