Я разрабатываю приложение, в котором одна из его функций позволяет пользователю вводить номер телефона или выбирать один из контактов телефона.StartActivityForResult для нескольких кнопок доступа к одному действию и получения разных данных по выбору?
Активность имеет 3 EditTexts
вместе с 3 Buttons
каждого на стороне, а кнопки открыть Контакты Activity
и возвращает выбранный телефонный номер и устанавливает EditText
соответствующим образом.
Я попытался установить отдельно cursors
для каждого button
. Я также пробовал использовать разные переменные intent
.
Моя проблема: Когда пользователь выбирает контакт для получения данных, курсор возвращает другое число. Либо он возвращает контакт рядом с ним, либо ранее выбранный контакт.
OnClick
метод для 3 кнопки с startActivityForResult
.
//The intent
i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
public void onClick(View v) {
switch (v.getId()){
case (R.id.button1):
startActivityForResult(i, 0);
break;
//I know it's an ImageView
case (R.id.imageView1):
startActivityForResult(i, 1);
break;
case (R.id.imageView2):
startActivityForResult(i, 2);
break;
}
}
OnActivityResult
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
switch (requestCode){
case (0) :
if (resultCode == Activity.RESULT_OK) {
Cursor c = getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
c.moveToFirst();
contact1 = c.getString(c.getColumnIndex(Phone.NUMBER));
et.setText(contact1);
}
break;
case (1) :
if (resultCode == Activity.RESULT_OK) {
Cursor c1 = getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
c1.moveToFirst();
contact2 = c1.getString(c1.getColumnIndex(Phone.NUMBER));
et2.setText(contact2);
}
break;
case (2) :
if (resultCode == Activity.RESULT_OK) {
Cursor c2 = getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
c2.moveToFirst();
contact3 = c2.getString(c2.getColumnIndex(Phone.NUMBER));
et3.setText(contact3);
}
break;
}
}
Хм, теперь я получаю IllegalStateException (не удалось прочитать строку 0) для курсоры. Что это значит? – Neaco
это означает, что указатель столбца неверен ... запустите 'c1.getColumnNames()' и напечатайте для себя все возвращаемые столбцы, используйте один из них ... – royB