最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
jQueryMobile設(shè)計(jì)Android通訊錄(第二章)

本文是jQuery Mobile設(shè)計(jì)Android通訊錄系統(tǒng)教程的第二篇,在上一篇教程中,初步介紹了我們要設(shè)計(jì)的應(yīng)用的架構(gòu)和頁面結(jié)構(gòu),并介紹了Jquery Mobile框架中重要的頁面元素的知識,以及Android Java應(yīng)用程序如何跟前端的JavaScript頁面進(jìn)行交互。在本系列教程的第二篇,將介紹如何創(chuàng)建新的通訊錄帳號及如何修改和刪除已經(jīng)存在的通訊錄名單。

堅(jiān)守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都成都陽光房小微創(chuàng)業(yè)公司專業(yè)提供成都企業(yè)網(wǎng)站定制營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

創(chuàng)建通訊錄帳號

下面來看下如何新創(chuàng)建通訊錄帳號。用戶只需要輸入自己的姓名,點(diǎn)保存按鈕。其中該部分的代碼是在ListPage.html中可以找到,代碼如下:

 
 
 
 
  1.  
  2.   ... 
  3.  
  4.  
  5.  
  6.   ... 
  7.    
  8.    
  9.     

    Create Account

     
  10.   
 
  •    
  •     
  •  
  •     

    Please enter name of the new account for this application

  •  
  •     Contacts created with this application will be associated with the new account specified below. 
  •     Other contacts can be viewed, however, cannot be deleted or modified with this application.
  •  
  •      
  •        
  •     
  •  
  •      
  •       
  •         data-inline="true">Save 
  •     
  •  
  •     ... 
  •   
  •  
  •   
  •  
  •  
  •   
  • ... 
  •  
  • ◆我們把創(chuàng)建帳號這個(gè)頁面放在頁面容器中,這個(gè)頁面有自己的頭部,內(nèi)容content部分和頁腳部分。

    ◆當(dāng)點(diǎn)SAVE按鈕時(shí),將會(huì)調(diào)用Javasccript中的createAccount()方法。

    ◆在Javasccript中的createAccount()方法中,獲得用戶的輸入的帳號名,即使用

    '#accountName').val()獲得其值,然后通過調(diào)用后端Android Java應(yīng)用中的createAccount方法去保存帳戶名。跟后端Android Java的交互,在本系列的第一篇教程中有提到,如果不大清楚,請查看第一篇教程。

    下面看下后端的Android Java應(yīng)用中的createAccount方法如何編寫。

     
     
     
     
    1. import android.accounts.AccountManager; 
    2. import android.accounts.Account; 
    3. ... 
    4. public class ContactsActivity extends Activity { 
    5.   ... 
    6.   private String accountType = null; 
    7.   ... 
    8.   public void onCreate(Bundle savedInstanceState) { 
    9.     ... 
    10.     accountType = "com.jquerymobile.demo.contact"; 
    11.     ... 
    12.   } 
    13.  
    14.   public void createAccount(String accountN, String displayPage){ 
    15.     if(accountN != null && !"".equals(accountN)){ 
    16.       accountNaccountName = accountN; 
    17.       AccountManager.get(this).addAccountExplicitly(new Account(accountName,accountType), "dummyPassword", null); 
    18.     } 
    19.     loadPage(displayPage); 
    20.   } 
    21.   ... 

    下面講解下這段代碼:

    ◆實(shí)際上帳號的創(chuàng)建是通過android.accounts.AccountManager類去創(chuàng)建的。Android2.0中加入了一個(gè)新的包android.accounts,該包主要包括了集中式的賬戶管理API,用以安全地存儲和訪問認(rèn)證的令牌和密碼,比如,我們的手機(jī)存在多個(gè)賬戶,每個(gè)賬戶下面都有不同的信息,甚至每個(gè)賬戶都可以與不同的服務(wù)器之間進(jìn)行數(shù)據(jù)同步(例如,手機(jī)賬戶中的聯(lián)系人可以是一個(gè)Gmail賬戶中的通訊錄,可聯(lián)網(wǎng)進(jìn)行同步更新)。

    這里首先通過AccountManager.get()獲得了它的一個(gè)實(shí)例,接著調(diào)用其addAccountExplicitly方法,創(chuàng)建了一個(gè)新的帳號,和密碼(這里的密碼默認(rèn)是dummyPassword),當(dāng)帳號創(chuàng)建完后,將回調(diào)HTML頁面,這里通過loadPage方法去加載回調(diào)HTML頁面。

    ◆為了能調(diào)用Android API中的創(chuàng)建帳號的功能,必須在AndroidManifest.xml中進(jìn)行如下設(shè)置,聲明一個(gè)intent-filter:

     
     
     
     
    1.  
    2.    
    3.  

    ◆除此之外,必須在meta-data中聲明帳號驗(yàn)證器如下:

     
     
     
     
    1.   android:name="android.accounts.AccountAuthenticator" 
    2.   android:resource="@xml/authenticator" /> 
    Finally, the res/xml/authenticator.xml configuration file (which is value of the android:resourceattribute above) should have an element named account-authenticator where value ofandroid:accountType attribute is set to com.jquerymobile.demo.contact. Note that this is value of theaccountType in ContactsActivity. Summarizing the discussion, first look at the highlighted section inAndroidManifest.xml.

    這里,用android:resource的值,指出了要在res/xml下配置一個(gè)驗(yàn)證配置文件authenticator.xml,文件如下:

     
     
     
     
    1.  
    2.   android:accountType="com.jquerymobile.demo.contact" 
    3.   android:icon="@drawable/icon" 
    4.   android:smallIcon="@drawable/icon" 
    5.   android:label="@string/app_name" 
    6. /> 

    其中的android:accountType指出了要驗(yàn)證的帳號的實(shí)體類為com.jquerymobile.demo.contact。最后我們綜合看下修改后的AndroidManifest.xml如下:

     
     
     
     
    1.  
    2.   package="com.jquerymobile.demo.contact" 
    3.   android:versionCode="1" 
    4.   android:versionName="1.0"> 
    5.      
    6.      
    7.      
    8.      
    9.     
    10.       android:label="@string/app_name"> 
    11.         
    12.           android:name=".authentication.AuthenticationService" 
    13.           android:exported="true"> 
    14.            
    15.              
    16.              
    17.             
    18.               android:resource="@xml/authenticator" /> 
    19.          
    20.         
    21.           android:configChanges="orientation|keyboardHidden" 
    22.           android:label="@string/app_name"> 
    23.              
    24.                
    25.                
    26.              
    27.          
    28.      
    29.    

    在文件中用uses-permission分別設(shè)置了帳號的讀寫或校驗(yàn)的權(quán)限,并且聲明了帳號的管理服務(wù)實(shí)現(xiàn)類為com.jquerymobile.demo.contact. authentication.AuthenticationService,在這個(gè)類中,將編寫一些關(guān)于帳號管理操作的業(yè)務(wù)邏輯。這個(gè)帳號業(yè)務(wù)管理器被定義為Android中的一個(gè)服務(wù),代碼如下:

     
     
     
     
    1. package com.jquerymobile.demo.contact.authentication; 
    2.  
    3. import android.app.Service; 
    4. import android.content.Intent; 
    5. import android.os.IBinder; 
    6.  
    7. public class AuthenticationService extends Service { 
    8.   public IBinder onBind(Intent intent) { 
    9.     return null; 
    10.   } 

     

    可以看到,這里跟普通的編寫Android服務(wù)沒什么大的區(qū)別,這里在onBind()中并沒有編寫具體的代碼,只是返回了null。但如果你需要將創(chuàng)建的帳號跟一些在線服務(wù)結(jié)合起來,那么則需要在這里編寫相關(guān)的實(shí)現(xiàn)代碼,并且還需要實(shí)現(xiàn)android.accounts.AbstractAccountAuthenticator接口。這里我們足夠用了,所以返回null?,F(xiàn)在,運(yùn)行程序,在輸入帳號并保存后,你會(huì)發(fā)現(xiàn)在Android 手機(jī)中的Accounts and sync settings的選項(xiàng)設(shè)置中,會(huì)發(fā)現(xiàn)你剛才新建的帳號,如下圖所示:

    #p#

     列出已存在的通訊錄

    下面,我們看下,當(dāng)用戶點(diǎn)某個(gè)人名的通訊錄時(shí),會(huì)顯示其通訊錄的詳細(xì)情況。先回顧下在本系列教程第一篇中,提到的如下代碼:

     
     
     
     
    1. function setContactsList(jsonText){ 
    2.     var tmpJson = $.parseJSON(jsonText); 
    3.     if(tmpJson != null && tmpJson.contacts != null){ 
    4.       var tmpContacts = tmpJson.contacts; 
    5.       for(i = 0; i < tmpContacts.length; i++){ 
    6.         var tmpKey = (tmpContacts[i]).key; 
    7.         var tmpKeyFragment = ''+tmpKey+'
    8. '; 
    9.         contactSelectionsVar.append(tmpKeyFragment); 
    10.         var tmpValues = (tmpContacts[i]).values; 
    11.         if(tmpValues != null){ 
    12.           var j; 
    13.           for(j = 0; j < tmpValues.length; j++){ 
    14.             var tmpDisplayName = tmpValues[j].displayName; 
    15.             var tmpContactId = tmpValues[j].contactId; 
    16.             var tmpLiFragment = '
    17.               tmpContactId + ');return false;">'+tmpDisplayName+'
    18. '; 
    19.             contactSelectionsVar.append(tmpLiFragment); 
    20.           } 
    21.         } 
    22.       } 
    23.     } 
    24.     contactSelectionsVar.listview('refresh'); 
    25.     showList(); 
    26.   } 

    這里,通過JavaScript去調(diào)用了showContact方法,用于顯示某個(gè)人的具體通訊錄,代碼如下:

     
     
     
     
    1. function showContact(tmpId){ 
    2.   showProgress(); 
    3.   contactSupport.showContact(tmpId,'DetailPage.html'); 

    這里,首先調(diào)用了等待圖標(biāo)的顯示方法,然后同樣調(diào)用后端Android Java的showContact方法調(diào)出通訊錄的詳細(xì)信息,然后再把結(jié)果回調(diào)顯示到DetailPage.html中而后端Java對應(yīng)的showContact方法如下:

     
     
     
     
    1. public void showContact(String contactId, String displayPage){ 
    2.   loadPage(displayPage + "?" + contactId); 

    這里再通過loadPage調(diào)用前端的JavaScirpt頁面,并傳入要查看的通訊錄的參數(shù)contactId,假如現(xiàn)在要看的某人的通訊錄的contatId是23,而回顯通訊錄詳細(xì)信息的頁面是DetailPage.html,則跳轉(zhuǎn)的URL為DetailPage.html?23#p#

    通訊錄詳細(xì)信息頁

    通訊錄詳細(xì)信息頁Detail.html頁面代碼如下,它分為三個(gè)部分,分別是顯示已存在的詳細(xì)通訊錄信息頁,空白的用于新建顯示錄入通訊錄的信息頁以及在刪除通訊錄時(shí)顯示的界面,先來看顯示已存在的詳細(xì)通訊錄信息頁的代碼如下:

     
     
     
     
    1.  
    2.    
    3.    
    4.     

       Details

       
    5.   
     
  •  
  •    
  •      
  •         
  •  
  •        
  •          
  •           
  •  
  •             
  •  
  •               
  •  
  •               
  •  
  •             
  •  
  •             
  •  
  •               
  •  
  •               
  •  
  •             
  •  
  •             
  •  
  •               
  •  
  •               
  •  
  •             
  •  
  •           
  •  
  •         
  • First name
    Last
     
  •                 name
  • Notes
     
  •       
  •  
  •  
  •        
  •         

    Phone Numbers

     
  •          
  •       
  •  

    注意如下幾點(diǎn):

    ◆這里的contactId是一個(gè)隱藏域,記錄當(dāng)前查看或修改的通訊錄的ID號,在更新時(shí)必須用到。

    ◆這里的電話號碼是一個(gè)可以展開輸入的伸縮面板,使用的是jQuery Mobile框架中的可伸縮區(qū)塊的方法。這里,為方便用戶輸入電話提供了更多的輸入選項(xiàng),當(dāng)用戶點(diǎn)“Phone Number”時(shí),會(huì)下拉顯示出更多的四種不同的通訊方式以供用戶輸入。只需要在代碼中寫入data-role="collapsible" data-collapsed="true"兩個(gè)jQuery Mobile的屬性即可。實(shí)際效果如下圖:

    我們繼續(xù)來看,剩下的象EMAIL及“更多”部分,都同樣使用了jQuery Mobile中的可收縮區(qū)域的技術(shù)去實(shí)現(xiàn),具體代碼請參考附件,這里不再列出,下面是其中的幾個(gè)截圖如下:

    最后是顯示三個(gè)新增,修改及刪除的按鈕及頁面的底部,代碼如下:

     
     
     
     
    1.  
    2.       
      Save
       
    3.       
      Delete
       
    4.       
      Cancel
       
    5.      
    6.    
    7.  
    8.    
    9.    
    10. ... 
    11.   

     

    ◆注意這里使用了data-role="controlgroup"這一jQuery Mobile提供的屬性,將三個(gè)按鈕都以同一分組的形式放在同一個(gè)區(qū)域,而data-type="horizontal" 則表示以垂直的方式分組將按鈕進(jìn)行擺放設(shè)置。

    ◆三個(gè)按鈕都通過Javascript實(shí)現(xiàn)觸發(fā)。

    接下來是顯示進(jìn)度條等待的頁面,代碼如下,比較簡單,不詳細(xì)論述。

     
     
     
     
    1.  
    2.   

      Processing...

       
    3.  
    4.  
    5.  
    6.   

      Please wait.

       
    7.    
    8.      
    9.    
    10.  
    11.  
    12.  

    當(dāng)用戶要?jiǎng)h除某條通訊錄時(shí),會(huì)出現(xiàn)新的頁面,以詢問用戶是否確認(rèn)刪除,代碼如下:

     
     
     
     
    1.  
    2.   

      Confirm delete

       
    3.  
    4.  
    5.  
    6.    
    7.     

      Are you sure you want to delete this contact?

       
    8.    
    9.    
    10.     
      Delete
       
    11.     
      Cancel
       
    12.    
    13.  
    14.  
    15.  

    #p#

    用JavaScript控制頁面的顯示和隱藏

    在本教程的第一講中,已經(jīng)講解了如何通過jQuery及Javscript,控制一個(gè)頁面容器中各個(gè)容器子頁的顯示和隱藏,這里只是簡單提到復(fù)習(xí)下,詳細(xì)的請參考第一篇教程。我們可以在jQuery的ready()方法中,定義一系列的變量,分別指代頁面容器中各子頁的頭部,內(nèi)容部分和頁腳部分,然后由于各個(gè)部分其實(shí)都是div層的結(jié)構(gòu),所以顯示時(shí)只需要調(diào)用show方法即可,隱藏時(shí)調(diào)用hide方法即可,下面是部分代碼,具體代碼請參考下載附件:

     
     
     
     
    1.  

    顯示已存在的數(shù)據(jù)記錄

    Having reviewed the structure of content pages in DetailPage.html, let us look into how to populate the contact details for an existing contact. Recall that the ContactsActivity.showContact() method displays DetailPage.html appending id of the contact as an HTTP query string, e.g. DetailPage.html?23. Let us see below how JavaScript code in DetailPage.html will process that information. The related section in jQuery $(document).ready() function is given below.

    在知道了頁面結(jié)構(gòu)后,我們現(xiàn)在看下,如何將后端的數(shù)據(jù)顯示在前端的界面中,這樣當(dāng)用戶點(diǎn)選一個(gè)已存在的通訊錄時(shí),會(huì)把該通訊錄的詳細(xì)信息顯示出來。我們看下之前說的,舉例說到的DetailPage.html?23這樣方式的鏈接,看下在DetailPage.html中,是如何用Javascript去讀取后端的數(shù)據(jù)的,關(guān)鍵是看jQuery中的ready()方法中處理的代碼,如下:

     
     
     
     
    1. $(document).ready(function () { 
    2.   ... 
    3.   showProgress(); 
    4.   contactIdVar.val(window.location.search.substring(1)); 
    5.   contactSupport.getContact(contactIdVar.val(),'setCurrentContact'); 
    6. }); 

    ◆首先是加載了進(jìn)度等待圖標(biāo)

    ◆然后用window.location.search.substring(1)獲得了當(dāng)前鏈接的中?號后的參數(shù),比如對于DetailPage.html?23這個(gè)例子來說,獲得了23的值,并且賦值給 contactIdVar.val這個(gè)變量。

    ◆最后,通過調(diào)用后端JAVA應(yīng)用的ContactsActivity.getContact()方法,傳入的是兩個(gè)參數(shù),一個(gè)是當(dāng)前通訊錄的id,另外的setCurrentContact是回調(diào)前端顯示處理結(jié)果的Javascript方法。下面看下ContactsActivity.getContact()方法的實(shí)現(xiàn),如下:

     
     
     
     
    1. public void getContact(String contactId, String contactCallback){ 
    2.   String json = ContactUtility.getContactJSON(contactId, ...); 
    3.   final String callbackFunction = "javascript:" + contactCallback + "('" + json + "')"; 
    4.   loadURL(callbackFunction); 

    這里,通過getContactJSON方法,產(chǎn)生了JSON格式的數(shù)據(jù)。下面看下如何產(chǎn)生JSON格式的數(shù)據(jù)。下面是應(yīng)用中模擬生成的JSON代碼,代碼如下:

     
     
     
     
    1.   "contactId":"265", 
    2.   "firstName":"Aafjes", 
    3.   "lastName":"Bertus", 
    4.   "note":{"rowId":"2265","text":"Author"}, 
    5.   "ims":[ 
    6.     {"rowId":"2274","protocol":"-1","value":""}, 
    7.     {"rowId":"2275","protocol":"0","value":"bertus@aim"}, 
    8.     {"rowId":"2276","protocol":"5","value":"bertus@google"}, 
    9.     {"rowId":"2277","protocol":"6","value":""}, 
    10.    。 
    11.   ], 
    12.   "phones":[ 
    13.     {"rowId":"2284","type":"1","no":"111-222-3333"}, 
    14.     {"rowId":"2285","type":"2","no":"222-000-9999"}, 
    15.     {"rowId":"2286","type":"3","no":"444-787-9900"}, 
    16.     {"rowId":"2287","type":"7","no":"555-744-9999"} 
    17.   ], 
    18.   "emails":[ 
    19.     {"rowId":"2271","type":"1","value":"[email protected]"}, 
    20.     {"rowId":"2272","type":"2","value":"[email protected]"}, 
    21.     {"rowId":"2273","type":"3","value":"[email protected]"} 
    22.   ], 
    23.   "organizations":[ 
    24.     {"rowId":"2269","type":"1","name":"Publications Inc.","title":"CEO"}, 
    25.     {"rowId":"2270","type":"2","name":"Volunteers Corp.","title":"Member"} 
    26.   ], 
    27.   "addresses":[ 
    28.     {"rowId":"2266","type":"1","street":"Alhambra st.","city":"Alhambra","state":"MI", 
    29.       "country":"USA","zip":"48100","poBox":""}, 
    30.     {"rowId":"2267","type":"2","street":"1 Corporation st","city":"Alhambra","state":"MI", 
    31.       "country":"USA","zip":"48000","poBox":"44456"}, 
    32.     {"rowId":"2268","type":"3","street":"","city":"","state":"", 
    33.       "country":"","zip":"","poBox":""} 
    34.   ] 

    以上的JSON中,contactId, firstName, lastName都是字符串類型,而address,email,phones等都是每個(gè)JSON對象中包含了多個(gè)對象,形成一個(gè)JSON數(shù)組。

    ◆注意在以上的對象中,都有一個(gè)rowId,它都是不會(huì)重復(fù)的,用以區(qū)別不同的記錄,也方便在前端Javascript代碼中進(jìn)行處理。

    ◆在ims數(shù)組中,有protocol屬性,它代表是用戶使用哪種即時(shí)通訊工具,這是由Android 通訊錄 API給出的定義,定義如下:

    o protocol=-1, 自定義

    o protocol=0, AIM

    o protocol=1, MSN

    o protocol=2, Yahoo

    o protocol=3, Skype

    o protocol=4, QQ

    o protocol=5, Google

    o protocol=6, ICQ

    o protocol=7, Jabber

    ◆同樣,在phones數(shù)組中的type屬性,也是Android 通訊錄 API給出的定義,如下:

    o type=1, Home

    o type=2, Mobile

    o type=3, Work

    o type=7, Other

    ◆emails數(shù)組中的type屬性,API定義如下:

    o type=1, Home

    o type=2, Work

    o type=3, Other

    ◆organizations 數(shù)組中的type屬性定義如下:

    o type=1, Work

    o type=2, Other

    ◆addresses 數(shù)組中的type屬性定義如下:

    o type=1, Home

    o type=2, Work

    o type=3, Other#p#

    在JavaScript中解析JSON

    下面我們看下如何在Javascript中對JSON進(jìn)行解析。

    定義常量

    我們?yōu)榱嗽O(shè)計(jì)方便,在Javscirpt中先定義一些常量,以方便代碼的書寫和閱讀,代碼如下:

     
     
     
     
    1. <bdo id="iiw62"></bdo>
      •