Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ListView Android PhoneContacts的字符串_Android_List_Listview_Contacts - Fatal编程技术网

ListView Android PhoneContacts的字符串

ListView Android PhoneContacts的字符串,android,list,listview,contacts,Android,List,Listview,Contacts,我想将我选择的电话联系人(目前有2个字符串)添加到列表视图中。 目前我正在这样做:(姓名和电话号码写入文本视图) 这是我想在列表中显示的字符串 它已经在使用textView,但是当我想添加第二个时,它会覆盖第一个。这就是为什么我想在列表中显示它 如何将其更改为listview 我尝试创建一个ArrayList并将字符串传递给这个ArrayList,但一直没有成功 private void contactPicked(Intent data) { Cursor cursor = null;

我想将我选择的电话联系人(目前有2个字符串)添加到列表视图中。 目前我正在这样做:(姓名和电话号码写入文本视图) 这是我想在列表中显示的字符串

它已经在使用textView,但是当我想添加第二个时,它会覆盖第一个。这就是为什么我想在列表中显示它

如何将其更改为listview

我尝试创建一个ArrayList并将字符串传递给这个ArrayList,但一直没有成功

private void contactPicked(Intent data) {
    Cursor cursor = null;
    try {
        String phoneNo = null ;
        String name = null;
        // getData() method will have the Content Uri of the selected contact
        Uri uri = data.getData();
        //Query the content uri
        cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        // column index of the phone number
        int  phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
        // column index of the contact name
        int  nameIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
        phoneNo = cursor.getString(phoneIndex);
        name = cursor.getString(nameIndex);
        // Set the value to the textviews
        textView1.setText(name);
        textView2.setText(phoneNo);

    } catch (Exception e) {
        e.printStackTrace();
    }
}
对于listview,我创建了一个

private ListView listView;
并在我的OnCreate中使用它

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contact_view);
    listView = (ListView) findViewById(R.id.listView);
private void contactPicked(){
游标=空;
ArrayList phonenumberList=新建ArrayList();//在此处声明ArrayList
ArrayList nameList=新建ArrayList();//在此处声明ArrayList
试一试{
字符串phoneNo=null;
字符串名称=null;
//getData()方法将具有所选联系人的内容Uri
cursor=getContentResolver().query(ContactsContract.Contacts.CONTENT\u URI,null,null,null);
cursor.moveToFirst();
//电话号码的列索引
int phoneIndex=cursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER);
//联系人姓名的列索引
int nameIndex=cursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY\u NAME);
phoneNo=cursor.getString(phoneIndex);
name=cursor.getString(nameIndex);
//将该值设置为文本视图
textView1.setText(名称);
textView2.setText(电话号码);
phonenumberList.add(phoneNo);//在arraylist中添加值
nameList.add(name);//在arraylist中添加值
}捕获(例外e){
e、 printStackTrace();
}
}
在listview中设置适配器:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contact_view);
    listView = (ListView) findViewById(R.id.listView);

    contactPicked();

  ArrayAdapter<String> arrayAdapter =      
                 new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, nameList); // Here Set your custom adapter which have two textview .
                 // Set The Adapter
                 listView.setAdapter(arrayAdapter); 
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u contact\u视图);
listView=(listView)findViewById(R.id.listView);
接触拾取();
ArrayAdapter ArrayAdapter=
新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,nameList);//这里设置有两个textview的自定义适配器。
//设置适配器
setAdapter(arrayAdapter);
如何创建自定义适配器请参见以下链接:

试试这个

public class ContactsUtils {

public static ArrayList<ContactModel> getContactList(Context ctx) {

    ArrayList<ContactModel> list = new ArrayList<ContactModel>();
    String displayName = "", phoneNo = "", email = " ";
    ContentResolver contentResolver = ctx.getContentResolver();
    Cursor curMain = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    if (curMain.getCount() > 0) {
        while (curMain.moveToNext()) {
            String contactId = curMain.getString(curMain.getColumnIndex(ContactsContract.Contacts._ID));
            displayName = curMain.getString(curMain.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{contactId}, null);
            contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{contactId}, null);
            Cursor emailCursor = contentResolver.query(Email.CONTENT_URI, null,Email.CONTACT_ID + " = " + contactId, null, null);
            if(emailCursor.getCount()>0){
                while (emailCursor.moveToNext()) {
                    email =   emailCursor.getString(emailCursor.getColumnIndex(Email.DATA));
                }
            }else{
                email = "";
            }
            emailCursor.close();
            if(phoneCursor.getCount()>0){
                while (phoneCursor.moveToNext()) {
                    phoneNo = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                }
            }else{
                phoneNo = "";
            }
            phoneCursor.close();

//              if(!email.equals("")) {
                ContactModel cm = new ContactModel();
                cm.setDisplayName(displayName);
                cm.setPhoneNumber(phoneNo);
                cm.setEmail(email);
                list.add(cm);
//              }
        }
    }
     curMain.close();
    return list;
}
}
公共类联系人{
公共静态ArrayList getContactList(上下文ctx){
ArrayList=新建ArrayList();
字符串displayName=“”,phoneNo=“”,email=“”;
ContentResolver ContentResolver=ctx.getContentResolver();
Cursor curMain=contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null);
如果(curMain.getCount()>0){
while(curMain.moveToNext()){
字符串contactId=curMain.getString(curMain.getColumnIndex(ContactsContract.Contacts._ID));
displayName=curMain.getString(curMain.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Cursor phoneCursor=contentResolver.query(ContactsContact.CommonDataTypes.Phone.CONTENT_URI,null,ContactsContact.CommonDataTypes.Phone.CONTACT_ID+“=?”,新字符串[]{contactId},null);
contentResolver.query(ContactsContract.commondatatypes.Phone.CONTENT_URI,null,ContactsContract.commondatatypes.Phone.CONTACT_ID+“=?”,新字符串[]{contactId},null);
Cursor emailCursor=contentResolver.query(Email.CONTENT\u URI,null,Email.CONTACT\u ID+“=”+contactId,null,null);
如果(emailCursor.getCount()>0){
while(emailCursor.moveToNext()){
email=emailCursor.getString(emailCursor.getColumnIndex(email.DATA));
}
}否则{
电子邮件=”;
}
emailCursor.close();
如果(phoneCursor.getCount()>0){
while(phoneCursor.moveToNext()){
phoneNo=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
}
}否则{
phoneNo=“”;
}
phoneCursor.close();
//如果(!email.equals(“”){
ContactModel cm=新ContactModel();
cm.setDisplayName(displayName);
cm.设置电话号码(电话号码);
cm.setEmail(email);
列表。添加(cm);
//              }
}
}
curMain.close();
退货清单;
}
}
然后创建联系人模型类

public static class ContactModel implements Comparable<ContactModel>{
    private String displayName = "", phoneNumber = "", email = "";



    @Override
    public int compareTo(ContactModel another) {
        return getDisplayName().compareTo(another.getDisplayName());    
    }


    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }


    public ContactModel() {
    }

    public ContactModel(String name) {
        this.displayName = name;
    }

    public String toString() {
        return displayName;
    }
}
公共静态类ContactModel实现了可比较的{
私有字符串displayName=“”,phoneNumber=“”,email=“”;
@凌驾
公共int比较(联系人模型另一个){
返回getDisplayName().compareTo(另一个.getDisplayName());
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公共字符串getDisplayName(){
返回显示名;
}
public void setDisplayName(字符串displayName){
this.displayName=displayName;
}
公共字符串getPhoneNumber(){
返回电话号码;
}
public void setPhoneNumber(字符串phoneNumber){
this.phoneNumber=电话号码;
}
公共联系人模型(){
}
公共联系人模型(字符串名称){
this.displayName=名称;
}
公共字符串toString(){
返回显示名;
}
}
而不是在你的活动中创建

ArrayList<ContactModel> contactlist = new Arralist<>();
contactlist = ContactsUtils.getContactList(MainActivity.this);
ArrayList contactlist=new Arralist();
contactlist=ContactsUtils.getContactList(MainActivity.this);

然后将此arrsylist传递到Listview适配器中。

有没有办法将字符串显示到Listview中?谢谢,我会尝试一下。你能告诉我应该在“yourdata”中写入什么内容吗?我的数据意图?简单的列表项目1是我在xml中创建的列表吗?对于动物也一样,你不需要传递任何东西,jus
ArrayList<ContactModel> contactlist = new Arralist<>();
contactlist = ContactsUtils.getContactList(MainActivity.this);