Cursor c=getContentResolver().query(ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.Data.LOOKUP_KEY}, null,null, null);
contacts=new ArrayList<String>();
phno=new ArrayList<String>();
c.moveToFirst();
while (c.moveToNext()) {
String contactname = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phnumber= c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contacts.add(contactname);//adding in array list
phno.add(phnumber);//adding in array list
}
c.close();
Пожалуйста, помогите мне с этой ошибкой, я понимаю, что если номер столбца -1, столбцов нет. Как я могу исправить эту проблему?
Вот код, а остальное - инициализация.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receive);
actv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
int permissioncheck = ContextCompat.checkSelfPermission(Receive.this, Manifest.permission.READ_CONTACTS);
if (permissioncheck == PackageManager.PERMISSION_GRANTED) {
showContacts();
}
else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);
}
ArrayAdapter<String> adapter=new ArrayAdapter<String>(Receive.this,android.R.layout.simple_list_item_1,contacts);
actv.setAdapter(adapter);
b1=(Button)findViewById(R.id.button);
tv=(TextView)findViewById(R.id.textView3);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
x=actv.getListSelection();
phone=phno.get(x).toString();
tv.setText(phone);
}
});
}
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){
if (requestCode==PERMISSIONS_REQUEST_READ_CONTACTS){
if (grantResults[0]==PackageManager.PERMISSION_GRANTED){
showContacts();
}else{
Toast.makeText(this,"permission granted",Toast.LENGTH_LONG).show();
}
}
}
Спасибо, что потратили время на просвещение людей. Этот сайт очень полезен для таких новичков, как я.
Проблема в вашей проекции, второй аргумент query():
new String[] { ContactsContract.Data.LOOKUP_KEY}
Вы просите запрос вернуть только столбец LOOKUP_KEY. Поэтому, когда вы позже попытаетесь найти индексы столбцов для DISPLAY_NAME и NUMBER, getColumnIndex() вернет -1, поскольку не может найти эти столбцы. Исправьте это, изменив вашу проекцию на это:
new String[] {
ContactsContract.Data.LOOKUP_KEY,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER
}
Вы также можете избавиться от ContactsContract.Data.LOOKUP_KEY, если вы его нигде не используете.
@saikumarkolisetty Я ничего не вижу в этом коде. Если у вас есть отдельная проблема, задайте новый вопрос.
я получаю два имени одного и того же контакта в списке массивов. Есть ли проблема с оставшимся кодом? Я не могу понять. Пожалуйста, объясни.