Android端JQueryMobile使用教程(二)

標簽(空格分隔): Android JQueryMobile


一、 通過Javascript訪問Android的Java代碼

說明:

Android提供了一個方法,可以供Javascript去訪問Java應用恃鞋,這個方法是位于android.webkit.WebView類中的addJavascriptInterface(Object object, String interfaceName)方法。這個方法允許從Javascript代碼去訪問在WebView中運行的Java類中的public方法睬塌,addJavascriptInterface方法中的obj為與javascript通信的應用程序庐船,interfaceName為提供給JavaScript調用的名稱。

示例代碼:

public class ContactsActivity extends Activity{
    WebView webView;
    
    public void onCreate(Bundle savedInstanceState){
        webView = new WebView(this);
        webView.addJavascriptInterface(this, "contactSupport");
    }
    
    public void deleteContact(String contactId, String displayPage){
    
    }
}

這段代碼榄棵,顯示了ContactsActivity這個類的實例凝颇,如何通過addJavascriptInterface方法,對外暴露為一個Javascript對象疹鳄,對外的接口名稱為“contactSupport”拧略。其中ContactsActivity中有很多public方法,它向外暴露了其中的deleteContact()方法瘪弓。

<script>
function someJavaScriptFunction() {
    contactSupport.deleteContact(contactIdVar.val(), "ListPage.html");
}
</script>

這段Javascript代碼則顯示了如何訪問后端Java代碼ContactsActivity 對象實例中的deleteContact方法垫蛆。

二、Android Java代碼訪問前端Javascript代碼

說明:

使用WebView類中的loadUrl(String url)方法去實現兩個目的:

  1. 在Webview瀏覽器中加載HTML頁
  2. 在WebView中加載HTML時,可以一道加載其中的Javascript袱饭。

注意:

  1. 在同一個容器頁面中弛随,不同內容頁之間的跳轉,都使用Javascript代碼宁赤。
  2. 在不同的容器中的互相調用舀透,需要在WebView的Java應用程序中,通過使用WebView.loadUrl(String url)去加載决左。

步驟:

  1. 用戶首先訪問HTML網頁愕够,這時調用Javascipt顯示頁面
  2. 接著,Javascript進行一些數據的處理佛猛,并調用后端的Java代碼惑芭。
  3. 在Java代碼處理完后,會通過loadUrl的方法继找,回調前端的Javascript代碼或者加載HTML頁遂跟。

示例代碼:

public class ContactsActivity extends Activity {
    WebView webView;
    private Handler handler = null;

    public void onCreate(Bundle savedInstanceState) {
        webView = new WebView(this);
        handler = new Handler();
        webView.addJavascriptInterface(this, "contactSupport");
    }
    
    public void deleteContact(String contactId, String displayPage) {
        //刪除數據庫中的記錄
        ContactUtility.deleteContact(contactId);
        
        //頁面跳轉
        loadPage(displayPage);
    }
    
    public void loadPage(String in) {
        final String url = "file:///android_asset/www/" + in;
        loadURL(url);
    }
    
    private void loadURL(final String in) {
        handler.post(new Runnable() {
            public void run() {
                webView.loadUrl(in);
            }
        });
    }
}

這段代碼,展示了前端的Javascript代碼調用了后段的delteContact()方法后婴渡,刪除數據庫中的記錄幻锁,然后重新加載一個HTML頁進行顯示。

在Android中边臼,新啟動的線程是無法刷新或者訪問UI界面的哄尔,因此就要使用Handler機制。在這里柠并,deleteContact()方法是無法直接調用 WebView.loadUrl()的岭接,主要有兩個原因,一個是WebView實例是在onCreate方法中創(chuàng)建調用的臼予,這是在主線程中鸣戴;第二個原因是當Javascript去調用deleteContact()時,執(zhí)行它的線程實際上是跟ContactsActivity中的onCreate()方法中的主線程是不同的粘拾。

在deleteContac()中窄锅,我們刪除了某條通訊錄記錄。接下來半哟,我們調用loadPage方法酬滤,這里我們指定了將要跳轉的顯示頁面,并在前面加了file:///android_asset/www/的前綴寓涨,意思是我們跳轉的這個頁面盯串,實際上是存放在android_asset/www目錄下的。最后戒良,我們在loadURL方法中使用Handler機制的post体捏,在新開的線程中加在WebView的loadUrl方法,并將其發(fā)送到消息隊列中去。

三几缭、 調用前端的Javascript

示例代碼:

public void getAllContacts(String callback, String accountCallback){
    final String accountCallbackFunction = "javascript:" + accountCallback + "()";
    if(accountName == null){
        loadURL(accountCallbackFunction);
        return;
    }

    final String json = ContactUtility.getAllContactDisplaysJSON(getContentResolver());
    final String callbackFunction = "javascript:" + callback + "(" + json + ")";
    loadURL(callbackFunction);

}

在這段代碼中河泳,getAllContacts方法的作用是產生JSON格式的通訊錄列表,其結果存放在json文本中年栓。然后再把結果回調給前端的javascript方法去處理解析JSON文本拆挥。這里的callbackFunction = "javascript:" + callback + "(" + json + ")",通過javascript:前端處理的Javascript方法名+JSON格式結果集某抓,返回給前端纸兔。最后也是通過loadURL方法,則可以達到調用前端Javascipt處理的效果否副。

<script>
$(document).ready(function(){
    contactSupport.getAllContacts("setContactsList", "showAccount");
});
</script>

在這代碼中汉矿,調用了Java后端的getAllContacts方法,而getAllContacts方法獲得JSON格式的結果集后备禀,會調用前端Javascript的setContactsList方法去處理洲拇,而參數中的showAccount,在后端的getAllContacts方法中曲尸,判斷如果當前通訊錄沒有任何數據時赋续,則會重新使用前端的showAccount這個Javascript方法去處理。

四队腐、前后端交互中參數的類型問題

說明:

在以上代碼中蚕捉,我們在前后端的交互中,只是使用了字符串類型柴淘。而其他類型如Integer等都將被轉型為字符串。而象復合類型的對象都將以JSON的形式進行傳遞交互秘通。在Java后端中为严,我們會使用Jackson JSON處理類庫對Java對象及JSON對象進行轉換,在Javascript前端中肺稀,則采用jQuery.parseJSON()方法去解析后端返回的JSON第股。

五、JOSN介紹

JSON(JavaScript Object Notation),是一種輕量級的數據交換格式话原。JSON與XML具有相同的特征夕吻,例如易于編寫和閱讀,易于機器生成和解析繁仁。但是JSON比XML數據傳輸的有效性要高出很多涉馅。JOSN完全獨立于編程語言,使用文本格式保存黄虱。

JSON數據有兩種結構:
l Name-Value對構成的集合稚矿,類似于Java中的Map。
l Value的有序列表,類似于Java中的Array晤揣。
JSON格式的數據示例:

{
    "Name": "Apple"桥爽,
    "Expiry": "2007/10/11 13:54",
    "Price": 3.99,
    "Sizes": ["Small", "Medium", "Large"]
}

更多關于JSON的說明請參看http://wwww.json.org/json-zh.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市昧识,隨后出現的幾起案子钠四,更是在濱河造成了極大的恐慌,老刑警劉巖跪楞,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件形导,死亡現場離奇詭異,居然都是意外死亡习霹,警方通過查閱死者的電腦和手機朵耕,發(fā)現死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淋叶,“玉大人阎曹,你說我怎么就攤上這事∩烽荩” “怎么了处嫌?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斟湃。 經常有香客問我熏迹,道長,這世上最難降的妖魔是什么凝赛? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任注暗,我火速辦了婚禮,結果婚禮上墓猎,老公的妹妹穿的比我還像新娘捆昏。我一直安慰自己,他們只是感情好毙沾,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布骗卜。 她就那樣靜靜地躺著,像睡著了一般左胞。 火紅的嫁衣襯著肌膚如雪寇仓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天烤宙,我揣著相機與錄音遍烦,去河邊找鬼。 笑死门烂,一個胖子當著我的面吹牛乳愉,可吹牛的內容都是我干的兄淫。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蔓姚,長吁一口氣:“原來是場噩夢啊……” “哼捕虽!你這毒婦竟也來了?” 一聲冷哼從身側響起坡脐,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤泄私,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后备闲,有當地人在樹林里發(fā)現了一具尸體晌端,經...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年恬砂,在試婚紗的時候發(fā)現自己被綠了咧纠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡泻骤,死狀恐怖漆羔,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情狱掂,我是刑警寧澤演痒,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站趋惨,受9級特大地震影響鸟顺,放射性物質發(fā)生泄漏。R本人自食惡果不足惜器虾,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一讯嫂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧曾撤,春花似錦端姚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巫湘。三九已至装悲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尚氛,已是汗流浹背诀诊。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阅嘶,地道東北人属瓣。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓载迄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抡蛙。 傳聞我的和親對象是個殘疾皇子护昧,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,860評論 25 707
  • 這篇博客主要來介紹 WebView 的相關使用方法惋耙,常見的幾個漏洞,開發(fā)中可能遇到的坑和最后解決相應漏洞的源碼熊昌,以...
    Shawn_Dut閱讀 7,218評論 3 55
  • 第一次作業(yè)绽榛,繪圖練習。在主持候場的間隙完成婿屹。對話框灭美,小時候亂涂亂畫最拿手昂利,哈哈
    胖浩子范兒閱讀 282評論 5 3
  • 不打算挽留我嗎届腐?我正在離開你的路上页眯。 我總是會給自己設置許多的難題梯捕,讓自己狼狽窝撵,讓自己難堪傀顾。 喜歡上你也是我給自己...
    Weirdoooo閱讀 191評論 0 0
  • 我喜歡歷史,假如可以無所顧忌地按照喜好選擇職業(yè)碌奉,我多半會選擇研究歷史短曾。但這話并不完全誠實赐劣。因為除了婦孺皆知的《史記...
    閆言閱讀 855評論 3 8