0

Так что я создаю приложение, которое берет контактную информацию из адресной книги и сохраняет ее в титановой модели, которая будет использоваться позже в путешествии пользователя.Магазин Адрес контактная книга в sqlite titanium

Вся остальная информация хранится и возвращается правильно, однако изображение контакта всегда по каким-либо причинам возвращается в исходное состояние.

код для хранения информации адресной книги заключается в следующем

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

Я только что решил, что это связано с тем, что изображение не может быть сохранено в SQLite DB. Способ подойти к нему - либо превратить его в строку base64, либо сохранить его в пространстве, а затем получить путь к изображению и сохранить его. Как только я разработал код, я опубликую его, чтобы каждый мог увидеть мой подход и как я его решил. –

ответ

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 контакта в базе данных, а затем использовать этот идентификатор для получения информации пользователя.

Обратите внимание, что запись пользователя не всегда имеет изображение, поэтому рекомендуется указать значение по умолчанию.