【问题标题】:get android contact phone number list获取android联系人电话号码列表
【发布时间】:2013-05-19 18:22:14
【问题描述】:

我是 android 的新手。当我尝试获取联系人姓名时,它工作正常,但我只想获取数字,但我无法这样做。我的代码是:-

package com.example.sqllitecontactlist;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

public class PhoneBookActivity extends Activity {

//Android listview object
ListView listViewPhoneBook;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  setContentView(R.layout.phone_book);

   //get the ListView Reference from xml file
  listViewPhoneBook=(ListView)findViewById(R.id.listPhoneBook);
  String[] arrayColumns = new String[]{ ContactsContract.CommonDataKinds.Phone.NUMBER};

    // arrayViewID is the id of the view it will map to here textViewPhone only 
  int[] arrayViewID = new int[]{R.id.textViewNumber};

 Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,        arrayColumns, null, null, null);

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.each_contact,    cursor, arrayColumns, arrayViewID);
 listViewPhoneBook.setAdapter(adapter); }}

当我执行此操作时,它显示“java.lang.IllegalArgumentException:无效列 data1”。我用谷歌搜索了很多并应用了一些解决方案但失败了。请帮帮我

【问题讨论】:

标签: android


【解决方案1】:
    getNumber(this.getContentResolver()); 


public void getNumber(ContentResolver cr)
{
    Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
            // use the cursor to access the contacts    
    while (phones.moveToNext())
    {
      String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
             // get display name
      phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
              // get phone number
      System.out.println(".................."+phoneNumber); 
    }

}

activity_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" >

<ListView
   android:layout_width="match_parent"
   android:layout_height="fill_parent"
   android:id="@+id/lv"/>

</RelativeLayout>

MainActivity.java

 public class MainActivity extends Activity {

     String phoneNumber;
     ListView lv;
     ArrayList <String> aa= new ArrayList<String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
         lv= (ListView) findViewById(R.id.lv);

        getNumber(this.getContentResolver()); 
    }

    public void getNumber(ContentResolver cr)
    {
        Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
        while (phones.moveToNext())
        {
          String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
          phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
          System.out.println(".................."+phoneNumber); 
          aa.add(phoneNumber);
        }
                 phones.close()// close cursor
          ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1,aa);
          lv.setAdapter(adapter);
                  //display contact numbers in the list
    }
      }

快照

确保你在清单中有这个

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

【讨论】:

  • :- 完成...你能告诉我 cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);在第二个参数中,我们传递了 null,这是什么意思..通过这样做它会获取所有列?
  • @ArpitSethi 它获取所有联系人,在列表中您将看到联系人列表中的所有号码
  • @ArpitSethi 为清楚起见developer.android.com/reference/android/content/…。向下滚动并检查查询方法及其参数
  • @ArpitSethi 您可以在上面指定您想要的列,它会查询所有无效的列。指定您需要的列,其余的保持不变
  • @ArpitSethi 检查此链接是否清晰stackoverflow.com/questions/6587674/…
【解决方案2】:

我恢复所有联系人的解决方案:

    Cursor cursor = null;
    try {
        cursor = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
        int contactIdIdx = cursor.getColumnIndex(Phone._ID);
        int nameIdx = cursor.getColumnIndex(Phone.DISPLAY_NAME);
        int phoneNumberIdx = cursor.getColumnIndex(Phone.NUMBER);
        int photoIdIdx = cursor.getColumnIndex(Phone.PHOTO_ID);
        cursor.moveToFirst();
        do {
            String idContact = cursor.getString(contactIdIdx);
            String name = cursor.getString(nameIdx);
            String phoneNumber = cursor.getString(phoneNumberIdx);
            //...
        } while (cursor.moveToNext());  
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }

您需要在清单中获得此权限:

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

希望对你有所帮助!

【讨论】:

  • 您可以验证回复,它会为您赢得声誉!
【解决方案3】:

.@Arpit:

在清单中添加权限。

但最重要的是... 您是否没有注意到,在您格式化 phoneNumber 的行下方,您没有添加姓名?您应该按照添加电话号码的方式将姓名添加到号码中(我附在下面的代码中):

..System.out.println(".................."+phoneNumber); 
aa.add(name);
aa.add(phoneNumber);

上述代码的输出将是列表视图中单独的名称和数字(像这样):


名称

号码

名称

为了在一行中显示,您可以这样做:

aa.add(name+"\n"+phoneNumber);

输出会是这样的:


名称 编号


名称 编号


名称 编号


祝你好运!

【讨论】:

    【解决方案4】:

    在下面找到解决方案,它适用于从联系人列表中获取联系人号码。

    您需要以下权限:

     android:name="android.permission.READ_CONTACTS"/>
    

    然后,调用联系人选择器:

     Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    

    那么,

     @Override
     public void onActivityResult(int reqCode, int resultCode, Intent data) {
     super.onActivityResult(reqCode, resultCode, data);
    
     switch (reqCode) {
      case (PICK_CONTACT) :
       if (resultCode == Activity.RESULT_OK) {
        Uri contactData = data.getData();
        Cursor c =  managedQuery(contactData, null, null, null, null);
         if (c.moveToFirst()) {
          String name = c.getString(c.getColumnIndexOrThrow(People.NAME));
          // TODO Whatever you want to do with the selected contact name.
        }
      }
      break;
      }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      相关资源
      最近更新 更多