Phonegap API中的 Contacts |
|
|
包四維
更新時間:2013/3/28 下午 03:16:39 |
|
另外補充一點 雖然不管出現的對應訊息是成功或失敗,資料都是有新增成功的 但有時候我新增資料時也會出現"新增完成"的訊息,但大部分時候都是出現失敗的訊息較多 |
|
|
|
包四維
更新時間:2013/3/28 下午 06:15:24 |
|
地址欄的資料的問題我已經解決了 原來是因為我看錯人,圖片中的是我FB上的資料@@
新增資料的問題我再想想為啥會這樣好了,謝謝 |
|
|
|
文淵閣工作室
更新時間:2013/3/29 上午 08:22:44 |
|
您好, 因為您的問題較為深入, 我們有作者在一起測, 沒有及時回報進度敬請見諒! |
|
|
|
文淵閣工作室
更新時間:2013/3/30 下午 12:34:34 |
|
您好: 您的問題很深入,也讓我們有更多學習的機會,謝謝!
聯絡人新增,我們將您原來的程式碼稍為修改,也加入一些 alert 作 debug, 經實作,執行是 ok 的,您可以參考程式碼,改為更符合您需要的。
$(function() {
//重新刷新手機聯絡簿 $('#refresh_btn').click(function() { var options = new ContactFindOptions(); options.filter=""; options.multiple = true; //設定為true可以傳回多筆,不然就只能有一筆 //全部欄位都抓 var filter = ["id","displayname","name","nickname","phoneNumbers","emails","addresses","ims","organizations","birthday","note","photos","categories","urls"]; navigator.contacts.find(filter, startContact, stopContact, options); });
//建立一筆新的聯絡簿成員 $('#create_btn').click(function() { // 注意這以下的程式碼 // -------------------------------------------------------------------------- var phoneNumbers = new Array(3); //電話必須使用陣列存放 // alert("pass a"); phoneNumbers[0] = new ContactField('work', $('#phoneNumbers').val(), false);
// 故意加入兩個空的欄位 phoneNumbers[1] = new ContactField('mobile', '', true); // 首选项 phoneNumbers[2] = new ContactField('home', '', false); alert($('#phoneNumbers').val()); // debug //建立Contact物件並且儲存 var contact = navigator.contacts.create(); // var contact = navigator.service.contacts.create(); alert("pass c"); // debug contact.displayName = $('#displayName').val(); contact.nickname = $('#nickname').val(); alert("pass d"); // debug contact.phoneNumbers = phoneNumbers; alert($('#phoneNumbers').val()); // debug contact.save(onSaveSuccess,onSaveError); // ------------------------------------------------------------ });
});
function onSaveSuccess(contacts) { alert('新增完成'); $('#displayName').val(''); $('#nickname').val(''); $('#phoneNumbers').val(''); }
function onSaveError(contactError) { alert("Error = " + contactError.code); } |
|
|
|
包四維
更新時間:2013/4/1 下午 02:52:08 |
|
您好,謝謝您跟作者相關團隊的回覆 但我這邊修改之後,出現了不一樣的錯誤狀況 在第78行程式執行最後一個alert之後(我這邊測試先前的alert都有出來) 理論上應該去執行80行的新增功能時,卻出現程式當掉的狀況(之後我有回到我手機聯絡人清單去觀看,該筆資料也確實沒有被記錄進去) http://www.littlebau.com/sample2/contact/06.png
當然我自己這邊也不斷的測試,此次修改跟我之前寫的比較不同處在哪裡
我之前的寫法,雖然程式導入新增失敗的邏輯中,但資料實際上是有真的紀錄進去的 var phoneNumbers = []; //電話必須使用陣列存放 phoneNumbers[0] = new ContactField('work', $('#phoneNumbers').val(), false);
目前修改的寫法,雖將陣列的定義更加清楚,但程式卻發生當掉或錯誤的現象(下列三個寫法都會當掉)
//寫法一,程式當了 var phoneNumbers = new Array(3); //電話必須使用陣列存放 phoneNumbers[0] = new ContactField('work', $('#phoneNumbers').val(), false); phoneNumbers[1] = new ContactField('mobile', '', true); // 首选项 phoneNumbers[2] = new ContactField('home', '', false);
//寫法二,程式當了 var phoneNumbers = new Array(3); //電話必須使用陣列存放 phoneNumbers[0] = new ContactField('work', $('#phoneNumbers').val(), false); phoneNumbers[1] = new ContactField('mobile', '', false); // 首选项 phoneNumbers[2] = new ContactField('home', '', false);
//寫法三,程式不會當,資料有真的紀錄進去,但最後會alert出error=0 var phoneNumbers = new Array(3); //電話必須使用陣列存放 phoneNumbers[0] = new ContactField('work', $('#phoneNumbers').val(), false); phoneNumbers[1] = new ContactField('mobile', $('#phoneNumbers').val(), true); // 首选项 phoneNumbers[2] = new ContactField('home', $('#phoneNumbers').val(), false);
//寫法四,程式不會當,資料有真的紀錄進去,但最後會alert出error=0 var phoneNumbers = new Array(3); //電話必須使用陣列存放 phoneNumbers[0] = new ContactField('work', $('#phoneNumbers').val(), false); phoneNumbers[1] = new ContactField('mobile', $('#phoneNumbers').val(), false); // 首选项 phoneNumbers[2] = new ContactField('home', $('#phoneNumbers').val(), false);
我想問一下這個跟phonegap的版本有沒有關係(其實我之前手動更換過最新的2.6版本,但狀況是一樣的),還是我的HTC XL手機比較奇怪呢,目前經由DW打包出來的phonegap為下列網址 http://www.littlebau.com/sample2/phonegap.js
相關原始碼已更新至 http://www.littlebau.com/sample2/contacttest.html |
|
|
|
包四維
更新時間:2013/4/1 下午 02:53:28 |
|
更正 在第79行程式執行最後一個alert之後(我這邊測試先前的alert都有出來) 理論上應該去執行81行的新增功能時,卻出現程式當掉的狀況 |
|
|
|
文淵閣工作室
更新時間:2013/4/2 上午 09:26:16 |
|
您好:
我們下載您最新的 <index.html>做測試,在我們的手機下執行, 新增也都是正常的,不過讀取聯絡人,無法讀取,不過這並不是重點。
原來的 <index.html> 我們再確認一次,新增並沒有問題, 我把原始檔寄給您。請您再測試看看。 |
|
|
|
|
|
文淵閣工作室
更新時間:2013/4/11 上午 09:22:45 |
|
您好: Sorry ! 我忘了在論談告知您,我已在 4/3 再次 mail 給您。 帳號是 bau720123@gmail.com,不知是否正確。 現在,我又再一次 mail 原來的 index.html 檔給您, 如果您還是沒有收到,也可以了解未收到的原因。
您現在的問題,我們需要一點時間研究。 |
|
|
|
包四維
更新時間:2013/4/14 下午 05:54:09 |
|
後來我有拿我的手機HTC Sensation XL跟我女友的Samsung Galaxy NOTE2測試
在程式碼第104行contact.ims = ims;
若是不把這行註解掉 XL:新增資料時,會出現01.png的訊息(資料其實有新增成功),但按下讀取連絡人時會出現02.png的訊息
NOTE2:新增資料時,會直接出現02.png的訊息(資料其實有新增成功),但按下讀取連絡人時還是會出現02.png的訊息
若是把這行註解掉 XL:新增資料時,會出現01.png的訊息(資料其實有新增成功),且按下讀取連絡人時會正常出現07.png的訊息(但即時通訊的那個欄位就會變成空,因為我註解了)
NOTE2:會出現新增成功的訊息(資料想當然有新增成功),且按下讀取連絡人時會正常出現07.png的訊息(但即時通訊的那個欄位就會變成空,因為我註解了)
這該不會是Webkit瀏覽支援度的問題吧,因為XL是很久以前的手機了,它的Webkit的版本或是可能也比較舊(打個比方就像是IE6不支援很多新東西一樣),反之,NOTE2自然是相對新的,所以不管是效率或是支援度的問題,都有大幅提升
不知道這樣解釋對嗎,可否也麻煩作者群那邊也幫我多測試呢,用一些舊的手機試試看 |
|
|
|
文淵閣工作室
更新時間:2013/4/15 上午 09:20:32 |
|
您好: 我們用 Galaxy i9000 和 i9300 測試過您的程式。 一、新增的部份可以新增,但有時會出現 Alert error 的錯誤訊息, 不過聯絡人新增是正常的。 二、日期 contact.birthday = '1983-02-02' 新增後格式會亂掉, 試過用 contact.birthday = new Date("1983/02/02 07:30:00"); 仍無法解決。悶! 三、以 ims[0] = new ContactField('qq', '88888888', false); //即時通訊 建立的聯絡人會自動建立在 我的聯絡人 群組中,但並不會建立 qq 群組。 四、讀者建立後的聯絡人是正常的,並不會出現出現您所說的錯誤。
到 google 搜尋,至今尚未找到解答,倒是看到有人說,這會不會是 PhoneGap 的 bug(!@#$%)。 目前我們手上並沒有太舊的手機,不過,我們會關注這個問題。 |
|
|
|
包四維
更新時間:2013/4/15 下午 01:33:31 |
|
真的謝謝您的回覆 不知道如果我將這問題反應給 https://groups.google.com/forum/?fromgroups#!forum/phonegap 有沒有用,不過可能要將我的文字跟圖片全部翻譯成英文了...
另外您提到有在網路上看到有人說,這可能是BUG,可否給我你看到的那個畫面的網址嗎 我想要持續追蹤下去
PS 昨天晚上試著把phonegap版本換成最新的2.60,發現navigator.notification.confirm 這個本來在2.30正常WORK的語法在新版本上出現了一個奇怪的特異現象,如果不介意的話我再PO篇與您分享好了 |
|
|
|
|
|
包四維
更新時間:2013/4/22 下午 01:46:48 |
|
挖哈,這篇文章我看過了 所以這IMS的問題我先省略好了 另外生日的問題也先省略,因為似乎IOS跟ANDROID存取日期的方式根本就不一樣
最後如果error code為0時,我也在程式碼特別註記若碰到這種狀況時,一律顯示為新稱成功,因為網路上有人說0似乎也是沒有錯誤的意思@_@ |
|
|
|
|
|
|