0

주소록에서 연락처 정보를 가져 와서 나중에 사용자 여행에서 사용할 수 있도록 티타늄 모델에 저장하는 응용 프로그램을 개발 중입니다.sqlite 티타늄에 주소록 연락처 저장

다른 모든 정보는 올바르게 저장되고 반환되지만 연락처의 이미지는 항상 공백으로 표시됩니다.

다음과 같이 주소록 정보를 저장하는 코드는

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를 저장 한 다음 사용자의 정보를 검색하기 위해이 식별자를 사용합니다.

사용자 기록에 항상 이미지가있는 것은 아니므로 기본값을 지정하는 것이 좋습니다.