将所有电话簿的联系方式都放入android中的数组

如何解决将所有电话簿的联系方式都放入android中的数组

| 我将所有电话簿的联系方式作为一个数组来获取。为此,我编写了以下代码
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);
    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,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
在执行此应用程序时,它会在应用程序中显示我所有的电话簿联系人,并在每一行中都带有复选框。如果我单击任何名称(列表项),它将所有联系人详细信息存储到数组中。但是我只想存储选定的联系人。我应该在代码中进行哪些更改..请提供必要的帮助     

解决方法

我已经修改了您的代码。现在,它的工作符合预期。如果对您有帮助,请投票给我,以便它也能提高您的评分 使用以下代码从手机检索联系人。 我测试过了工作正常
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);
            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,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();

        }
    }
    ,
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,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));

        }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?