在sqlite钛中存储地址簿联系人

时间:2016-06-26 19:39:26

标签: titanium titanium-mobile titanium-alloy appcelerator-titanium titanium-modules

所以我正在构建一个应用程序,它从地址簿中获取联系信息并将其存储到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;
}
};

从地址簿收集图像并将其放入列表视图时,图像工作正常。然而,当它被保存,然后我尝试检索它并将其放入发生问题的列表视图中。

谢谢你们。

1 个答案:

答案 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存储在数据库中,然后使用该标识符来检索用户的信息。

请注意,用户的记录并不总是有图像,因此最好提供默认值。