相关疑难解决方法(0)

android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为2

下面是我的代码,我得到了android.database.CursorIndexOutOfBoundsException:索引-1请求,大小为2错误.谁能告诉我如何解决它?

ContentResolver cr = getContentResolver();
  Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
    null, null, null, null);
  if (Integer.parseInt(cur.getString(
    cur.getColumnIndex(People.PRIMARY_PHONE_ID))) > 0) {

   Cursor pCur = cr.query(
     Contacts.Phones.CONTENT_URI, 
     null, 
     Contacts.Phones.PERSON_ID +" = ?", 
     new String[]{id}, null);
   int i=0;
   int pCount = pCur.getCount();
   String[] phoneNum = new String[pCount];
   String[] phoneType = new String[pCount];
   while (pCur.moveToNext()) {
    phoneNum[i] = pCur.getString(
      pCur.getColumnIndex(Contacts.Phones.NUMBER));
    phoneType[i] = pCur.getString(
      pCur.getColumnIndex(Contacts.Phones.TYPE));
    i++;
   } 
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

android cursor contacts

18
推荐指数
1
解决办法
2万
查看次数

获得android联系人

我试图获得所有联系人列表和电子邮件地址.

目前我正在使用此代码,但是我得到了许多重复的名称和电子邮件.我想要的只是一个人和一封电子邮件.有没有办法在查询联系人时合并联系人?

我也只是在寻找> 2.0的解决方案.

    private void init() {

    ContentResolver cr = 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(ContactsContract.Contacts._ID));
    String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id},null); 
        while (emailCur.moveToNext()) { 
                String email = emailCur.getString( emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                Log.e("Email",name+" "+email);
            } 
            emailCur.close();
        }

    }
Run Code Online (Sandbox Code Playgroud)

android contacts

11
推荐指数
1
解决办法
1万
查看次数

从Android内置电话簿获取电子邮件ID和名称?

我正在尝试将Android内置电话簿中的名称和电子邮件ID添加到我的页面中,我可以获取姓名,联系人ID,电话号码.但是我无法从Android电话簿中获取电子邮件ID.

代码是:

 public static final int PICK_CONTACT = 1;
 @Override
 button.setOnClickListener(new OnClickListener() {
 public void onClick(View _view) {
 Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
 startActivityForResult(intent, PICK_CONTACT);  
   } 
 });
}

@Override 
public void onActivityResult(int reqCode, int resCode, Intent data) 
{
 super.onActivityResult(reqCode, resCode, data);

switch(reqCode) {
  case (PICK_CONTACT) : {
    if (resCode == Activity.RESULT_OK) {
      Uri contactData = data.getData();
      Cursor c = managedQuery(contactData, null, null, null, null);
      c.moveToFirst();
      String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
      String name1 = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
      String ContactID = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));

   if(Integer.parseInt(name1) == 1){ …
Run Code Online (Sandbox Code Playgroud)

android contacts android-contacts

6
推荐指数
1
解决办法
3076
查看次数

Android内容提供者未返回Phone.NUMBER

(更新)这适用于模拟器,但不适用于我的HTC图例:(

我的ListActivity中有以下方法,并且它没有返回Cursor中的任何值(getCount = 0)

我无法理解为什么.我在列表中点击哪个联系人并不重要.

protected void onListItemClick(ListView l, View v, int position, long id) {
   // TODO Auto-generated method stub
   super.onListItemClick(l, v, position, id);
   Log.d(TAG,"onListItemClick");

   //get Telephone number for entry and display in Toast
   Uri phoneUri = ContentUris.withAppendedId(Phone.CONTENT_URI, id);
   Log.d(TAG,String.valueOf(phoneUri));
   String[] projection = new String[]{Phone.NUMBER};


   //Get Cursor
   Cursor phoneCursor = managedQuery(phoneUri, projection, null, null, null);

   while(phoneCursor.moveToNext()){
       String dspNumber;
       String number = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(Phone.NUMBER));
       if(number==""){
           dspNumber = "No number found";
       }else{
           dspNumber = number;
       }

       Toast.makeText(this,dspNumber, 3000).show();
   }
 }
Run Code Online (Sandbox Code Playgroud)

java android

6
推荐指数
1
解决办法
408
查看次数

获得联系人绩效问题

我想获得Android设备的联系人.我在这里找到了很好的示例代码

但是,当尝试使用该代码进行填充ListActivityArrayAdapter,需要花费大量时间 - 在galaxy s2上花费大约4秒钟,在旧设备上花费更多时间.我需要改善这种表现.我认为实现Cursor将包含多个维度Cursor,并SimpleCursorAdapter用作列表适配器.
我发现这种方法几乎没有问题:

  • 我不知道如何在特定位置获得物品.
  • 每个游标都有不同的列.

有更好/更简单的方法吗?

编辑:

这是我的代码:

public List<ContactData> readContacts(){
    ContentResolver cr = getContentResolver();
    List<ContactData> cd = new ArrayList<ContactData>();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
           null, null, null, ContactsContract.Contacts.DISPLAY_NAME);

    if (cur.getCount() > 0) {
       while (cur.moveToNext()) {
           String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
           String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
           if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {

               // get the phone number
               Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                                      ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
                                      new String[]{id}, null); …
Run Code Online (Sandbox Code Playgroud)

java android cursor

5
推荐指数
1
解决办法
1049
查看次数

联系人选择器,检索姓氏,名字,电话号码

现在,我可以检索电话号码并将editText的文本设置为该号码.但是,当我尝试获取姓氏或名字时,它不起作用.请注意我评论的内容.

继承我的代码:

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class main extends Activity {

    private static final int CONTACT_PICKER_RESULT = 1001; 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button getContacts = (Button)findViewById(R.id.getContacts);
        getContacts.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(Intent.ACTION_PICK,
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
                startActivityForResult(i, CONTACT_PICKER_RESULT);

            }
        });
    }
    protected void onActivityResult(int reqCode, …
Run Code Online (Sandbox Code Playgroud)

android

4
推荐指数
1
解决办法
6009
查看次数

使用Android SDK在联系人中获取地址

我正在尝试从Android联系人列表中检索联系人的姓名,电话号码和地址.名称和电话非常简单,但1.6 api级别的地址似乎无法访问.

有人想出如何获得联系人的地址吗?2.0中还有一个全新的api.如何通过使用1二进制来利用这个并回退到旧的api.如果这是可能的.

android import-contacts addressbook google-contacts-api

1
推荐指数
2
解决办法
2万
查看次数