所以我正在构建一个应用程序,它从地址簿中获取联系信息并将其存储到Titanium Model中,以便以后在用户旅程中使用。
所有其他信息都正确存储和返回,但由于某种原因,联系人的图像总是空白。
存储地址簿信息的代码如下
if (Ti.Contacts.contactsAuthorization == Ti.Contacts.AUTHORIZATION_AUTHORIZED){
var people = Titanium.Contacts.getAllPeople();
var totalContacts = people.length;
var addressbook = [];
Alloy.Collections.contactsModel.numberOfContacts();
Ti.API.info(numberOfContacts);
if(totalContacts > 0){
var phoneContacts = [];
for (var index = 0; index < totalContacts; index++){
var person = people[index];
phoneContacts.push({
name:person.fullName,
phoneNumber:person.phone,
profileImage:person.image,
contactID:person.identifier
});
}
Alloy.Collections.contactsModel.reset(phoneContacts);
Alloy.Collections.contactsModel.each(function(_m) {
_m.save();
});
}
} else if (Ti.Contacts.contactsAuthorization == Ti.Contacts.AUTHORIZATION_UNKNOWN){
Ti.Contacts.requestAuthorization(function(e){
//Authorization is unknown so requesting for authorization
if (e.success) {
} else {
}
});
} else {
}
}
模型定义如下
exports.definition = {
config: {
columns: {
"friendID": "INTEGER PRIMARY KEY AUTOINCREMENT",
"contactID": "string",
"name": "string",
"phoneNumber": "string",
"emailAddress": "string",
"profileImage": "blob"
},
adapter: {
type: "sql",
collection_name: "contactsModel",
idAttribute:"friendID"
}
},
extendModel: function(Model) {
_.extend(Model.prototype, {
// extended functions and properties go here
});
return Model;
},
extendCollection: function(Collection) {
_.extend(Collection.prototype, {
collection.trigger('sync');
},
}
}
*/
});
return Collection;
}
};
从地址簿收集图像并将其放入列表视图时,图像工作正常。然而,当它被保存,然后我尝试检索它并将其放入发生问题的列表视图中。
谢谢你们。
答案 0 :(得分:0)
要考虑的是不将所有信息都放在数据库中。原因是当它在设备上发生变化时,这些变化不会反映在您存储的记录中。
以下是我如何处理它:
var db = Ti.Database.open( 'person' );
db.execute( "CREATE TABLE IF NOT EXISTS people( " +
"id INTEGER PRIMARY KEY, identifier TEXT, pid INTEGER);" );
var person = db.execute( 'SELECT id, identifier, pid FROM people' );
while( person.isValidRow( ) ) {
var contact,
contact_id;
if( OS_IOS ) {
contact_id = person.fieldByName( 'identifier' );
}
if( OS_ANDROID ) {
contact_id = person.fieldByName( 'pid' );
}
contact = Ti.Contacts.getPersonByIdentifier( contact_id );
var p_image = contact.image || "/images/user";
...
}
基本上,我将联系人的ID存储在数据库中,然后使用该标识符来检索用户的信息。
请注意,用户的记录并不总是有图像,因此最好提供默认值。