【问题标题】:getting all phone book contact details into an array in android将所有电话簿联系人详细信息放入android中的数组中
【发布时间】:2020-11-02 02:25:52
【问题描述】:

我以数组形式获取所有电话簿联系方式。为此,我编写了以下代码:

package com.android.toggle2;

import java.util.ArrayList;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

import android.app.ListActivity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;


public class Toggle3 extends ListActivity 
{
    ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        Cursor mCursor = getContacts();
        startManagingCursor(mCursor);
        // Now create a new list adapter bound to the cursor.
        // SimpleListAdapter is designed for binding to a Cursor.
        ListAdapter adapter = new SimpleCursorAdapter(this, // Context.
                android.R.layout.simple_list_item_multiple_choice, // Specify the row template
                                                        // to use (here, two
                                                        // columns bound to the
                                                        // two retrieved cursor
                                                        // rows).
                mCursor, // Pass in the cursor to bind to.
                // Array of cursor columns to bind to.
                new String[] { ContactsContract.Contacts.DISPLAY_NAME ,
                        ContactsContract.Contacts._ID},
                // Parallel array of which template objects to bind to those
                // columns.
                new int[] { android.R.id.text1, android.R.id.text2 });

        // Bind to our new adapter.
        setListAdapter(adapter);

         final ListView listView = getListView();
            listView.setItemsCanFocus(false);
            listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    }

    private Cursor getContacts() 
    {
        // Run query
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        String[] projection = new String[] { ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME };
        String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
                + ("1") + "'";
        String[] selectionArgs = null;
        String sortOrder = ContactsContract.Contacts.DISPLAY_NAME+ " COLLATE LOCALIZED ASC";

        return managedQuery(uri, projection, selection, selectionArgs,sortOrder);
    }

    protected void onListItemClick(ListView l, View v, int position, long id)
    {
    super.onListItemClick(l, v, position, id);
    //here i want to handle the event.and should display the details of that contacts in another screen .
    //Toast.makeText(Toggle3.this,"Item in position " + position + " clicked",Toast.LENGTH_LONG).show();
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
    if (cur.getCount() > 0) 
    {
        while (cur.moveToNext()) 
        {
        String ids = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
        String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        list.add(new BasicNameValuePair("name",name.toString())); 
        //String number = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.NUMBER));
            if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)  

            {
            //Query phone here.  
            Cursor pCur = cr.query(
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                    null, 
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                    new String[]{ids}, null);

                                      while(pCur.moveToNext())
                                      {
                                   String number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                                   list.add(new BasicNameValuePair("num",number.toString())); 
                                      }

                                    pCur.close();
            }//if

    }//while
        Log.i("array items", "" +list);
    }//if
    }//on click
    }//class

在执行此应用程序时,它会在应用程序中显示我所有的电话簿联系人,每行中都有复选框。如果我单击任何名称(列表项),它会将所有联系人详细信息存储到一个数组中。但我只想存储选定的联系人。我应该在我的代码中更改什么.. 请提供必要的帮助

【问题讨论】:

    标签: android


    【解决方案1】:

    我修改了你的代码。现在它按预期工作。如果对您有帮助,请投票给我的答案,这样它也会增加您的收视率

    使用以下代码从手机中检索联系人。

    我已经测试过了。它工作正常

    public static void getContactNumbers(Context context) {
            String contactNumber = null;
            int contactNumberType = Phone.TYPE_MOBILE;
            String nameOfContact = null;
            if (ApplicationConstants.phoneContacts.size() <= 0) {
                ContentResolver cr = context.getContentResolver();
                Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
                        null, null, null);
                if (cur.getCount() > 0) {
                    while (cur.moveToNext()) {
                        String id = cur.getString(cur
                                .getColumnIndex(BaseColumns._ID));
                        nameOfContact = cur
                                .getString(cur
                                        .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    
                        if (Integer
                                .parseInt(cur.getString(cur
                                        .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                            Cursor phones = cr
                                    .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                            null,
                                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                                    + " = ?", new String[] { id },
                                            null);
    
                            while (phones.moveToNext()) {
                                contactNumber = phones.getString(phones
                                        .getColumnIndex(Phone.NUMBER));
                                contactNumberType = phones.getInt(phones
                                        .getColumnIndex(Phone.TYPE));
                                Log.i(TAG, "...Contact Name ...." + nameOfContact
                                        + "...contact Number..." + contactNumber);
    
                            }
                            phones.close();
                        }
    
                    }
                }// end of contact name cursor
                cur.close();
    
            }
        }
    

    【讨论】:

    • hai Deepak,我执行了那个代码。我得到了 cursorIndexOufOfBounds 异常。我现在该怎么办
    • hai Deepak,我执行了该代码。每当我点击特定的联系人时,它都会显示 cursorIndexOufOfBounds 异常。我现在应该做什么
    • 您是否点击了我发送给您的代码?你的安卓手机上有联系人吗?
    • 是的,我的模拟器中有联系人..当我点击第一个联系人时,它会显示 cursorIndexOutOfBounds 异常。如果我点击任何其他联系人,它会显示不正确的结果(显示另一个联系人姓名和号码)。
    • 嗨乌莎。看我的回答。我已经修改了。现在工作正常
    【解决方案2】:
            Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
            while (phones.moveToNext())
            {
            String Name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
            String Number=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    
            }
    

    【讨论】:

      【解决方案3】:
       public void readContacts()
      {
          int i=0;
          Cursor  cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                  null,null,null,null);
          count=cursor.getCount();
          names=new String[count];
          phno=new String[count];
          while(cursor.moveToNext())
          {
             names[i]=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)) ;
             phno[i]=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
             i++;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        • 2020-08-24
        • 1970-01-01
        • 2011-01-13
        • 2012-02-21
        • 1970-01-01
        相关资源
        最近更新 更多