New Ribbon
用Canva設計超快超質感(第2版):商業設計、簡報、影片、網頁、電子書與AI應用最速技 AI繪圖工具 × AI視覺設計平台,從圖像生成到專業設計! 最強職場助攻!ChatGPT + AI 高效工作術 短影音制霸:打造TikTok、YT Shorts、IG Reels成功方程式與AI高效創作力 Canva+AI創意設計與品牌應用250招:從商業技巧、社群祕技到AI圖文影音特效 快快樂樂學威力導演2024.影音剪輯與AI精彩創作 Power Automate自動化超效率工作術 Midjourney AI圖像魔導書:搭配ChatGPT魔法加倍 超人氣FB+IG+LINE社群經營與行銷力(第二版) 翻倍效率工作術:不會就太可惜的 Excel × ChatGPT 自動化應用 AppInventor2零基礎入門班中文版(第六版) Python零基礎入門班(第四版) C語言學習聖經 用Canva設計超快超質感:平面、網頁、電子書、簡報、影片製作與AI繪圖最速技 PHP8/MySQL網頁程式設計自學聖經 翻倍效率工作術 - 不會就太可惜的Power BI大數據視覺圖表設計與分析(第三版) 社群經營一定要會的影音剪輯與動畫製作術 Notion高效管理250招:筆記×資料庫×團隊協作,數位生活與工作最佳幫手 Office 2021高效實用範例必修16課(附500分鐘影音教學/範例檔) Excel自學聖經(第二版):從完整入門到職場活用的技巧與實例大全

 

  Phonegap API中的 Contacts

包四維

包四維
更新時間:2013/3/27 下午 04:36:16

 

您好,是這樣的,最近我正在練習Phonegap API中的 Contacts 這個項目中的操作跟練習,目前在讀取聯絡人清單跟寫入聯絡人清單上發生了一點點小問題

事情是這樣的

我手機中有很多人聯絡人資料,其中第一筆就是我自己
http://www.littlebau.com/sample2/contact/01.png
如同畫面中敘述,我住家這欄是有資料的

但在我的APP執行中按下讀取聯絡人後,地址欄這邊的資料卻出不來
http://www.littlebau.com/sample2/contact/02.png
http://www.littlebau.com/sample2/contact/03.png
我參考了很多文獻資料,這樣的寫法應該沒錯,可否幫我看看為什麼呢
該功能位於程式碼中的103-122行,之後大約在第158行中被呼叫出來,addresses_pref,addresses_type,.....

另外在按下新增聯絡人時,畫面上會出現錯誤的訊息,當然這訊息是我定的,但實際上程式的跑法不應該跑到這段敘述,因為實際上這筆資料雖然畫面上顯示失敗,但實際上是有新增成功的
http://www.littlebau.com/sample2/contact/04.png
http://www.littlebau.com/sample2/contact/05.png
該功能位於程式碼中的74-78行,實際上應該跑74-77行才對,但最後卻到了第166行了

以上問題煩請回覆一下,我所有的程式碼都在
http://www.littlebau.com/sample2/contacttest.html
可任意下載或是參考,也可以再透過DW編譯到APP當中

包四維

包四維
更新時間: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/2 上午 10:23:54

 

我還沒收到信唷XD,再麻煩您寄一下哩
bau720123@gmail.com

讀取聯絡人有問題應該是因為
http://www.littlebau.com/sample2/contacttest.html
第35行的位置
options.filter = "基隆路"; //塞選器,留空且在搜尋的狀況時表示全部都搜

因為我為了測試方便,只故意打特定的關鍵字,讓資料筆數不要一次都出來啦,這樣比較好方便看低

包四維

包四維
更新時間:2013/4/10 下午 01:51:55

 

您好,距離我上次問問題到現在已經長達8天都得不到您的EMAIL通知或是回覆,我現在有發生一些問題,不知道這部分有沒有辦法解決呢
我的完整原始碼如下
http://www.littlebau.com/sample2/contact.html

一開始我先新增一個聯絡人(值都寫死在原始碼當中,雖畫面上會出現新增失敗的訊息,但實際上是有新增成功的,這點我還在研究),但當讀取聯絡人時卻發生了當機的問題
http://www.littlebau.com/sample2/question/01.png
http://www.littlebau.com/sample2/question/02.png

後來我透過兩種程式來看我剛新增的那個聯絡人的詳細資料

在原始的"電話"聯絡人管理模式中,會看到生日紀錄的是不正確的值,即時訊息的群組也是空的
http://www.littlebau.com/sample2/question/04.png

在我自己的灌的程式"GO聯絡人"管理模式中,會看到生日紀錄的卻是正確的值,但即時訊息的群組也是空的
http://www.littlebau.com/sample2/question/05.png

後來我發現在02當中不是會發生當機的狀況嗎,若是此時手動將該筆聯絡人的群組設定回正確的值,則在該頁面上再次按下讀取聯絡人時就不會發生當機的狀況了,但生日欄位的資訊卻是一

連串的號碼紀錄,而不如我本預期所見YYYY-MM-DD的紀錄方式
http://www.littlebau.com/sample2/question/06.png
http://www.littlebau.com/sample2/question/07.png

紀錄生日的原始碼在第68行,contact.birthday = '1983-02-02';
紀錄即時通訊群組的欄位在第103行,ims[0] = new ContactField('qq', '88888888', false); //即時通訊

可否給我一些建議跟解法呢
我的手機是HTC Sensation XL

文淵閣工作室

文淵閣工作室
更新時間: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/16 下午 01:39:33

 

我發佈了一篇文章到
https://groups.google.com/forum/?fromgroups=#!topic/phonegap/RJygSmzWGJc

就看看有沒有會回應囉

文淵閣工作室

文淵閣工作室
更新時間:2013/4/18 下午 05:19:48

 

您好:
很佩服您的求知精神。
這一篇是我之前提到的。
https://groups.google.com/forum/?fromgroups#!topic/phonegap/NuM0JReIC8M

裡面的內容,我並沒有詳細看,給您參考看看!

包四維

包四維
更新時間:2013/4/22 下午 01:46:48

 

挖哈,這篇文章我看過了
所以這IMS的問題我先省略好了
另外生日的問題也先省略,因為似乎IOS跟ANDROID存取日期的方式根本就不一樣

最後如果error code為0時,我也在程式碼特別註記若碰到這種狀況時,一律顯示為新稱成功,因為網路上有人說0似乎也是沒有錯誤的意思@_@




 

 

Re:Phonegap API中的 Contacts

請輸入姓名。

已超出字元數目的最大值。


請輸入電子郵件。

格式無效。


請輸入內容。