无法显示在PhoneGap的联系人数据的图像图像、联系人、数据、PhoneGap

2023-09-06 00:25:39 作者:少年,别回头。

我试图获取联系人资料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的过时的本地引用
 
导入头像一键搞定 iPhone QQ通讯录4.0支持iOS 6

尽管我已指定以下的Andr​​oid权限

 <使用-权限的Andr​​oid:名称=android.permission.VIBRATE/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_COARSE_LOCATION/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_FINE_LOCATION/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_LOCATION_EXTRA_COMMANDS/>
<使用-权限的Andr​​oid:名称=android.permission.READ_PHONE_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>
<使用-权限的Andr​​oid:名称=android.permission.RECEIVE_SMS/>
<使用-权限的Andr​​oid:名称=android.permission.RECORD_AUDIO/>
<使用-权限的Andr​​oid:名称=android.permission.MODIFY_AUDIO_SETTINGS/>
<使用-权限的Andr​​oid:名称=android.permission.READ_CONTACTS/>
<使用-权限的Andr​​oid:名称=android.permission.WRITE_CONTACTS/>
<使用-权限的Andr​​oid:名称=android.permission.WRITE_EXTERNAL_STORAG​​E/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_NETWORK_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.GET_ACCOUNTS/>
<使用-权限的Andr​​oid:名称=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;
}