Android 获取联系电话号码
我很难得到联系电话号码,我一直在日志中得到一个错误Android 获取联系电话号码,android,contacts,contactscontract,Android,Contacts,Contactscontract,我很难得到联系电话号码,我一直在日志中得到一个错误 02-24 19:40:42.772: ERROR/CursorWindow(21467): Bad request for field slot 0,-1. numRows = 1, numColumns = 24 这是我的密码 import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import
02-24 19:40:42.772: ERROR/CursorWindow(21467): Bad request for field slot 0,-1. numRows = 1, numColumns = 24
这是我的密码
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.Button;
import android.widget.SimpleCursorAdapter;
import android.os.Bundle;
public class Contacts extends Activity {
private ListView mContactList;
private Button mAddContact;
private boolean mShowInvisible = false;
boolean set;
public String name = "";
public String id;
public String phone;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_listview);
mContactList = (ListView) findViewById(R.id.contactList);
mAddContact = (Button) findViewById(R.id.addContactButton);
mAddContact.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(i,1);
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode == RESULT_OK){
getContactData(data);
}
}
public void getContactData(Intent data){
ContentResolver cr = getContentResolver();
Uri contactData = data.getData();
Log.v("Contact", contactData.toString());
Cursor c = managedQuery(contactData,null,null,null,null);
if(c.moveToFirst()){
id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
Log.v("Contact", "ID: " + id.toString());
name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.v("Contact", "Name: " + name.toString());
if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(Phone.CONTENT_URI,null,Phone.CONTACT_ID +" = ?", new String[]{id}, null);
while(pCur.moveToNext()){
phone = c.getString(c.getColumnIndex(Phone.NUMBER));
Log.v("getting phone number", "Phone Number: " + phone);
}
}
}
}
在我尝试获取电话号码之前,一切都正常在调用“moveToNext()”之前,您需要重置光标。只需在片刻之前调用“pCur.moveToFirst();”。这应该会有帮助。应该是:
while(pCur.moveToNext()){
phone = pCur.getString(pCur.getColumnIndex(Phone.NUMBER));
Log.v("getting phone number", "Phone Number: " + phone);
}
也就是说,pCur而不是保存联系人的“c”光标?我得到了它,我取出了while循环,现在我得到了正确的数字我不确定,因为出于某种原因,即使在放入pCur.moveToFirst()之后,它也不会执行while在while循环之前,我使用了与您的代码相同的代码,但是我得到了错误,比如对字段槽0,-1的错误请求。numRows=1,numColumns=23