我试图获取联系人资料PIC即化身使用下面的code。在的PhoneGap
为机器人
但我得到以下网址的回报,我不知道我应该如何显示它在
IMG
标记。
code
VAR defaultImagePath ='.. /资源/图像/ default_usr.png
VAR IMG =接触[I] .photos!= NULL?
联系人[I] .photos [0] .value的:defaultImagePath;
返回的URL是
内容://com.android.contacts/contacts/739/photo
现在,当最终在列表中,我尝试使用,以显示它
< IMG SRC =内容://com.android.contacts/contacts/739/photo/>
但它没有显示什么?所以如何将我显示联系人的形象?
我有最新的的PhoneGap
版本
我用
window.resolveLocalFileSystemURI(联系人[I] .photos [0] .value的,this.onResolveSuccess,this.fail);
但我得到以下运行时错误
JNI错误(应用程序错误):尝试使用PhoneGap的过时的本地引用
尽管我已指定以下的Android权限
<使用-权限的Android:名称=android.permission.VIBRATE/>
<使用-权限的Android:名称=android.permission.ACCESS_COARSE_LOCATION/>
<使用-权限的Android:名称=android.permission.ACCESS_FINE_LOCATION/>
<使用-权限的Android:名称=android.permission.ACCESS_LOCATION_EXTRA_COMMANDS/>
<使用-权限的Android:名称=android.permission.READ_PHONE_STATE/>
<使用-权限的Android:名称=android.permission.INTERNET对/>
<使用-权限的Android:名称=android.permission.RECEIVE_SMS/>
<使用-权限的Android:名称=android.permission.RECORD_AUDIO/>
<使用-权限的Android:名称=android.permission.MODIFY_AUDIO_SETTINGS/>
<使用-权限的Android:名称=android.permission.READ_CONTACTS/>
<使用-权限的Android:名称=android.permission.WRITE_CONTACTS/>
<使用-权限的Android:名称=android.permission.WRITE_EXTERNAL_STORAGE/>
<使用-权限的Android:名称=android.permission.ACCESS_NETWORK_STATE/>
<使用-权限的Android:名称=android.permission.GET_ACCOUNTS/>
<使用-权限的Android:名称=android.permission.BROADCAST_STICKY/>
更新
loadContacts:函数(){
VAR ARR = [];
VAR过滤器=显示名,姓名,phoneNumbers,电子邮件,地址,照片];
VAR的选择=新ContactFindOptions();
options.filter =;
options.multiple = TRUE;
navigator.contacts.find(过滤器,
功能(触点){
对于(VAR I = 0; I< contacts.length;我++){
如果(联系人[I] .photos){
对于(VAR J = 0; J<联系人[I] .photos.length; J ++){
returnValidPhoto(联系人[I] .photos [J],功能(回答){
执行console.log(答案);
如果(联系人[I] .photos [J]!= NULL);
联系人[I] .photos [J]。价值=回答;
});
VAR联系数据=新的联络人资料(姓名,
09090909,
联系人[I] .photos [J]。价值);
arr.push(联系数据);
}
}
}
Ext.getStore('ContactStore的')使用setData(ARR)。
//的document.getElementById(联络人资料)的innerHTML =数据;
},功能(错误){
警报(ERR);
},选项);
}
这里是图像功能
函数returnValidPhoto(URL,回调){
的console.log(图像称为);
VAR IMG =新的图像();
img.onload =功能(){
//图像是确定
的console.log(图像OK);
回调(url.value);
};
img.onerror =功能(错误){
//返回的默认图像的用户没有照片
的console.log(图像失败);
url.value =/resources/images/default_usr.png;
回调(/资源/图像/ default_usr.png);
}
img.src = url.value;
};
解决方案
我碰到这个问题,前几天来了,终于找到了解决办法。
VAR returnValidPhoto =功能(URL,回调){
VAR IMG =新的图像();
img.onload =功能(){
//图像是确定
回调(URL);
};
img.onerror =功能(错误){
//返回的默认图像的用户没有照片
回调(image_for_no_avatar.png);
}
img.src =网址;
};
//用法示例
returnValidphoto(contact.photos [0] .value的,功能(回答){
contact.photos [0] .value的=回答;
}
i am trying to fetch the contact profile pic i.e. avatar of contact data using following code in PhoneGap
for android
but i am getting following url in return and i don't know how should i show it in a img
tag.
Code
var defaultImagePath ='../resources/images/default_usr.png'
var img = contacts[i].photos != null ?
contacts[i].photos[0].value : defaultImagePath;
returned url is
content://com.android.contacts/contacts/739/photo
now when eventually in a list i am trying to show it using
<img src="content://com.android.contacts/contacts/739/photo"/>
but its not displaying anything ? so how would i show the contact image ?
i have the latest PhoneGap
version
i have used
window.resolveLocalFileSystemURI( contacts[i].photos[0].value , this.onResolveSuccess, this.fail);
but i am getting following run time error
JNI ERROR (app bug): attempt to use stale local reference in phonegap
even though i have specified following permissions in android
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
UPDATE
loadContacts:function(){
var arr = [];
var filter = ["displayName", "name", "phoneNumbers","emails","addresses","photos"];
var options = new ContactFindOptions();
options.filter="";
options.multiple=true;
navigator.contacts.find(filter,
function(contacts) {
for (var i = 0; i < contacts.length; i++) {
if (contacts[i].photos) {
for (var j = 0; j < contacts[i].photos.length; j++) {
returnValidPhoto(contacts[i].photos[j], function(answer) {
console.log(answer);
if(contacts[i].photos[j]!=null);
contacts[i].photos[j].value=answer;
});
var contactData = new ContactData("Name" ,
"09090909",
contacts[i].photos[j].value);
arr.push(contactData);
}
}
}
Ext.getStore('ContactStore').setData(arr);
// document.getElementById("contactdata").innerHTML = data;
}, function(err) {
alert(err);
},options);
}
here is the image function
function returnValidPhoto(url,callback){
console.log("IMAGE CALLED");
var img = new Image();
img.onload = function() {
//Image is ok
console.log("IMAGE OK");
callback(url.value);
};
img.onerror = function(err) {
//Returning a default image for users without photo
console.log("IMAGE FAILED");
url.value = "/resources/images/default_usr.png";
callback("/resources/images/default_usr.png");
}
img.src = url.value;
};
解决方案
I came across this issue a few days ago and finally found a workaround.
var returnValidPhoto=function(url,callback){
var img = new Image();
img.onload = function() {
//Image is ok
callback(url);
};
img.onerror = function(err) {
//Returning a default image for users without photo
callback("image_for_no_avatar.png");
}
img.src = url;
};
//Example usage
returnValidphoto(contact.photos[0].value, function(answer) {
contact.photos[0].value=answer;
}