как сохранить имена контактов, номера, contact_id в ArrayList / средство выбора контактов

Это действие работает, но я хочу сохранить информацию о контактах (phone_number, name, contact_id) в ArrayList. Затем я буду использовать настраиваемый адаптер для просмотра списка этого массива в флажке для построения с множественным выбором. Я буду использовать контактную информацию на более поздних этапах программы. Помогите мне с вашими идеями, пожалуйста. Спасибо .

MainActivity.java

package com.javacodegeeks.android.androidphonecontactsexample;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;

public class MainActivity extends Activity {
    public TextView outputText;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        outputText = (TextView) findViewById(R.id.textView1);
        fetchContacts();
    }

    public void fetchContacts() {

        String phoneNumber = null;
        String email = null;
        //http://yazilimdevi.com/yazilimdevi/Makaleler-867-hashtable-vs--hashmap.aspx
        //http://stackoverflow.com/questions/19974166/contacts-adding-in-arraylist-for-listview-error




        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);
        }
    }

}

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_margin="10dp"
        android:textSize="20sp"
        android:gravity="center"
        android:text="@string/ContactsInformation" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView"
        android:layout_alignRight="@+id/textView"
        android:layout_below="@+id/textView"
        android:gravity="center"
        android:text="@string/TextView" />

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true" />

</RelativeLayout>

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">AndroidPhoneContactsExample</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="ContactsInformation">Contacts Information</string>
    <string name="TextView">TextView</string>
</resources>

person Gülay Külekçi    schedule 11.05.2014    source источник
comment
Запрос ссылок на сторонние ресурсы считается не по теме для Stack Overflow. Что вы пробовали и с какими конкретными проблемами столкнулись?   -  person CommonsWare    schedule 12.05.2014
comment
Извини . Я что-то пробовал, но удаляю их, потому что было много ошибок. Я спрошу еще раз после того, как найду свои старые проблемы в своих кодах. Но сначала я спросил об этом, может быть, кто-нибудь может с нуля показать путь. Извините за мой английский: / Также я смотрю эту ссылку, она похожа на мою, но не нашел там полезного ответа: stackoverflow.com/questions/12470363/   -  person Gülay Külekçi    schedule 12.05.2014
comment
я отредактировал свой вопрос. Теперь мне нужно использовать Arraylist для хранения контактов.   -  person Gülay Külekçi    schedule 20.05.2014


Ответы (1)


добавить массив вверху

ArrayList<String> arr = new ArrayList<String>();

затем измените цикл while следующим образом

 while (cursor.moveToNext()) {

            output = new StringBuffer();  //re initialize your StringBuffer again

            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");

            arr.add(output.toString());  //add contact here in your array list.
        }

теперь arr будет содержать все контакты.

person Waqar Ahmed    schedule 20.05.2014
comment
Большое спасибо ! Также я задам один вопрос к. Чем эта структура ArrayList отличается от ArrayList‹Contacts› contact = ArrayList‹Contacts›(); ?? Я пытался использовать ArrayList‹Contacts› contact = ArrayList‹Contacts›(); но не смог добиться :/ - person Gülay Külekçi; 20.05.2014
comment
Согласно вашему списку массивов, который вы создали. это означает, что вам нужен пользовательский объект Contacts, что означает, что вам нужно определить класс, который содержит три поля. имя, телефон, электронная почта. вы назначаете им valeus, а затем будете хранить в списке массивов контактов..:). - person Waqar Ahmed; 20.05.2014
comment
Кажется, это решение занимает слишком много времени. У меня почти 900 контактов, и получение всего набора контактов занимает почти 10 секунд. - person AKA; 02.11.2016