商城APP開(kāi)發(fā)關(guān)于城市列表數(shù)據(jù)的增量更新機(jī)制與HTML5之間的交付方案。商城APP在開(kāi)發(fā)過(guò)程中每當(dāng)有城市數(shù)據(jù)更新時(shí),version可以立即自增+1。問(wèn)題是,如何判斷有城市數(shù)據(jù)更新?一種解決方案是,在服務(wù)器建立一個(gè)Timer,每十分鐘跑一次,檢查10分鐘前后的數(shù)據(jù)是否有改動(dòng),如果有,version就自增+1,并返回這些有改動(dòng)的數(shù)據(jù)(新增、刪除和修改)。這樣就保證了10分鐘內(nèi),從A改成B又改回A,這時(shí)候我們認(rèn)為是沒(méi)有改動(dòng)的,版本號(hào)不需要自增+1。那么問(wèn)題來(lái)了,對(duì)于1000筆城市數(shù)據(jù),每次只改動(dòng)其中的幾筆,返回?cái)?shù)據(jù)中包括那些沒(méi)有改動(dòng)過(guò)的數(shù)據(jù)是沒(méi)有意義的,是否可以只返回這些改動(dòng)的數(shù)據(jù)?分析1.0和2.0版本的城市列表數(shù)據(jù),每筆數(shù)據(jù)都有cityId和其他一些字段,比如說(shuō)城市名稱、簡(jiǎn)拼、全拼等。
APP開(kāi)發(fā)公司程序開(kāi)發(fā)工程師畫(huà)了一個(gè)表,如圖3-2所示,試圖展示出1.0和2.0這兩個(gè)版本的城市數(shù)據(jù)之間的異同。

圖3-2 比較兩個(gè)版本城市數(shù)據(jù)間的異同我來(lái)解釋一下圖3-2,以cityId作為唯一標(biāo)識(shí),只在1.0中出現(xiàn)的cityId是要?jiǎng)h除的數(shù)據(jù),只在2.0中出現(xiàn)的cityId是要增加的數(shù)據(jù),二者的交集則是cityId相同的數(shù)據(jù),這又分為兩種情況,所有字段都相同的數(shù)據(jù)是不變的數(shù)據(jù);cityId相同但某個(gè)字段不相同,則是修改的數(shù)據(jù)。增量更新的數(shù)據(jù),就由增、刪、改這3部分?jǐn)?shù)據(jù)構(gòu)成。于是,我們可以重新定義城市列表的JSON格式,在每筆增量數(shù)據(jù)中增加一個(gè)字段type,用來(lái)區(qū)別是增(c)、刪(d)、改(u)中的哪種情況,如下所示:
{
"isMatch": false,
"version": 1,
"cities": [
{
"cityId": 1,
"cityName": "北京",
"pinyin": "beijing",
"jianpin": "bj",
"type": "d"
},
{ "cityId": 2,
"cityName": "上海",
"pinyin": "shanghai",
"jianpin": "sh",
"type": "c"
},
{ "cityId": 3,
"cityName": "平頂山",
"pinyin":
"pingdingshan",
"jianpin": "pds",
"type": "u"
}
]
}
客戶端在收到上述格式JSON數(shù)據(jù)后,會(huì)根據(jù)type值來(lái)處理存放在本地的數(shù)據(jù)。因?yàn)椴皇侨扛拢蕴幚砥饋?lái)很快。這種增量更新城市數(shù)據(jù)的策略,會(huì)使得App的邏輯很簡(jiǎn)單,但是服務(wù)器的邏輯很復(fù)雜。這樣做是劃算的,我們要想盡辦法確保App的輕量,把復(fù)雜的業(yè)務(wù)邏輯放在后端。

開(kāi)發(fā)商城APP解決App與HTML5的交互
App與HTML5的交互,是一個(gè)可以大做文章的話題。有的團(tuán)隊(duì)直接使用PhoneGap來(lái)實(shí)現(xiàn)交互的功能,而我則認(rèn)為PhoneGap太重了。我們完全可以把這些交互操作在底層封裝好,然后給開(kāi)發(fā)人員使用。為了開(kāi)發(fā)人員方便,我們要準(zhǔn)備一臺(tái)測(cè)試用的PC服務(wù)器,在上面搭建一個(gè)IIS,這樣可以快速搭建自己的Demo,對(duì)于App開(kāi)發(fā)人員而言,不需要等待HTML5團(tuán)隊(duì)就可以自行開(kāi)發(fā)并測(cè)試了。他們只需知道一些基本的Html和JavaScript語(yǔ)法,而相應(yīng)的培訓(xùn)非常簡(jiǎn)單。
開(kāi)發(fā)商城APP解決App操作HTML5頁(yè)面的方法
APP開(kāi)發(fā)公司為了演示方便,在assets中內(nèi)置了一個(gè)HTML5頁(yè)面?,F(xiàn)實(shí)中,這個(gè)HTML5頁(yè)面是放在遠(yuǎn)程服務(wù)器上的。首先要定好通信協(xié)議,也就是App要調(diào)用的HTML5頁(yè)面中JavaScript的方法名稱。例如,App要調(diào)用HTML5頁(yè)面的changeColor(color)方法,改變HTML5頁(yè)面的背景顏色。
1)HTML5
開(kāi)發(fā)商城APP解決HTML5頁(yè)面操作
App頁(yè)面的方法仍然是先定義通信協(xié)議,這次定義的是JavaScript要調(diào)用的Android中方法名稱。例如,點(diǎn)擊HTML5的文字,回調(diào)Java中的callAndroidMethod方法:1)HTML5
<aonclick="baobao.callAndroidMethod(100,100,'ccc',true)">CallAndroidMethod</a>2)Android新創(chuàng)建一個(gè)JSInterface1類,包括callAndroidMethod方法的實(shí)現(xiàn):classJSInteface1{publicvoidcallAndroidMethod(inta,floatb,Stringc,booleand){if(d){StringstrMessage="-"+(a+1)+"-"+(b+1)+"-"+c+"-"+d;newAlertDialog.Builder(MainActivity.this).setTitle("title").setMessage(strMessage).show();}}}同時(shí),需要注冊(cè)baobao和JSInterface1的對(duì)應(yīng)關(guān)系:wvAds.addJavascriptInterface(newJSInteface1(),"baobao");調(diào)試期間我發(fā)現(xiàn)對(duì)于小米3系統(tǒng),要在方法前增加@JavascriptInterface,否則,就不能觸發(fā)JavaScript方法。
好了,
深圳APP開(kāi)發(fā)公司本文關(guān)于“商城APP開(kāi)發(fā)關(guān)于城市列表數(shù)據(jù)的增量更新機(jī)制與HTML5之間的交付方案”就分享到這里。如果您需要聯(lián)系深圳的APP開(kāi)發(fā)公司為您定制開(kāi)發(fā)高端商城APP,請(qǐng)咨詢我們網(wǎng)站在線客服或者撥打我們網(wǎng)站APP開(kāi)發(fā)技術(shù)客服聯(lián)系電話,為您提供詳細(xì)的電商APP商城開(kāi)發(fā)解決方案。謝謝關(guān)注,博納網(wǎng)絡(luò)編輯整理。