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を格納し、ユーザーの情報を取得するために、その識別子を使用しています。

ユーザーのレコードには必ずイメージがあるわけではないので、デフォルトを指定することをお勧めします。

関連する問題