【问题标题】:fetch all android contacts and details and put in single multidimensional array获取所有 android 联系人和详细信息并放入单个多维数组
【发布时间】:2014-02-24 16:36:09
【问题描述】:

我是 android(Java) 新手,我想执行一个简单的任务 我如何获取设备上的所有联系人电话号码、电子邮件和全名及其详细信息并放入 它们在一个数组中 我来自 PHP 背景,所以数组在 PHP 中看起来像这样:

 ContactsArray[0] = array(
                    'fullname' => 'John doe',
                    'Phone' => '0909809890' ,
                    'email' => 'johndoe@email.com'
                         )

从 PHP 的角度来看,数组应该是这样的, 我是 android 新手,想要一个类来获取所有这些数据 将它们放在一个数组中 返回数据。

伪代码

     function GetContacts(){
     contacts = fetchAllContactsDetails
     return contacts;
     }

【问题讨论】:

    标签: java android arrays multidimensional-array


    【解决方案1】:

    这可能是一个开始。请注意,我尚未对此进行测试,可能存在错误,但您会明白的。

    阅读本文以获取有关多维数组的更多信息。 Link

    String phpArray;
    int x=3;
    int y=array.length();
    String[][] myStringArray = new String [y][x];
    
    for(int i=0; i<array.length; i++){
        for(int j=0; j<3; j++){
            phpArray = contactsArray[i];
            myStringARray[i][j] = phpArray[j];
        }
    
    }
    

    【讨论】:

    • 感谢您的回复,但主要问题是如何获取存储在手机上的所有联系人并将其放入单个数组中。
    【解决方案2】:

    首先您需要在清单文件中添加读取联系人的权限:

    <uses-permission android:name="android.permission.READ_CONTACTS" > 
    </uses-permission> 
    

    您可以查看以下代码:

    public void fetchContacts() { 
        String phoneNumber = null; 
        String email = null; 
        Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI; 
        String _ID = ContactsContract.Contacts._ID; 
        String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME; 
        String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER; 
        Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
        String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID; 
        String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER; 
        Uri EmailCONTENT_URI =  ContactsContract.CommonDataKinds.Email.CONTENT_URI;
        String EmailCONTACT_ID = ContactsContract.CommonDataKinds.Email.CONTACT_ID; 
        String DATA = ContactsContract.CommonDataKinds.Email.DATA; 
        StringBuffer output = new StringBuffer(); 
        ContentResolver contentResolver = getContentResolver(); 
        Cursor cursor = contentResolver.query(CONTENT_URI, null,null, null, null);   
        // Loop for every contact in the phone 
        if (cursor.getCount() > 0) { 
            while (cursor.moveToNext()) { 
                String contact_id = cursor.getString(cursor.getColumnIndex( _ID )); 
                String name = cursor.getString(cursor.getColumnIndex( DISPLAY_NAME )); 
                int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex( HAS_PHONE_NUMBER ))); 
                if (hasPhoneNumber > 0) { 
                    output.append("\n First Name:" + name); 
                    // Query and loop for every phone number of the contact 
                    Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null, Phone_CONTACT_ID + " = ?", new String[] { contact_id }, null); 
                    while (phoneCursor.moveToNext()) { 
                        phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER)); 
                        output.append("\n Phone number:" + phoneNumber); 
    
                    } 
                    phoneCursor.close(); 
                    // Query and loop for every email of the contact 
                    Cursor emailCursor = contentResolver.query(EmailCONTENT_URI,    null, EmailCONTACT_ID+ " = ?", new String[] { contact_id }, null); 
    
                    while (emailCursor.moveToNext()) { 
    
                        email = emailCursor.getString(emailCursor.getColumnIndex(DATA)); 
                        output.append("\nEmail:" + email); 
    
                    } 
    
                    emailCursor.close(); 
                } 
                output.append("\n"); 
    
            } 
            outputText.setText(output); 
        } 
    } 
    

    }

    【讨论】:

    • 这很好用,但是我如何将结果放入数组中,就像我上面提到的格式一样?
    • 我添加了一些 output.append,您需要将这些行替换为数组,并将值添加到数组中。例如,您可以使用@Susie 的行并声明:int i=0;int x=3;int y= cursor.getCount(); String[][] myStringArray = new String [y][x]; 并替换outputs.append,您可以编写:myStringARray[i][0] = name;myStringARray[i][1] = phoneNumber;myStringARray[i][2] = email; 并添加@987654330 @在每次迭代中
    • 我收到这个错误:getContentResolver() 方法未定义
    • getContentResolver是属于Context子类的方法,比如Activity。您可以在上下文中使用它Context context;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2016-06-15
    • 1970-01-01
    相关资源
    最近更新 更多