AutoCompleteTextView ウィッチが連絡先リストからのユーザー入力を完了するようにしようとしていますが、作成しましたが、大きなパフォーマンス ダメージを引き起こしました。
CursorLoader を使用してみました ( https://developer.android.com/training/load-data-background/setup-loader.html )
アプリは現在強制終了しています:
07-30 05:02:45.034: E/AndroidRuntime(1396): FATAL EXCEPTION: main
07-30 05:02:45.034: E/AndroidRuntime(1396): java.lang.ClassCastException:
android.content.CursorLoader cannot be cast to android.database.Cursor
コード:
@Override
public Loader<Cursor> onCreateLoader(int loaderID, Bundle bundle)
{
/*
* Takes action based on the ID of the Loader that's being created
*/
switch (loaderID) {
case NAMES_LOADER:
// Returns a new CursorLoader
CursorLoader peopleCursor = new CursorLoader(
context, // Parent activity context
ContactsContract.Contacts.CONTENT_URI, // Table to query
null, // Projection to return
null, // No selection clause
null, // No selection arguments
null // Default sort order
);
while (((Cursor) peopleCursor).moveToNext()) {
contactName = ((Cursor) peopleCursor).getString(((Cursor) peopleCursor)
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contactId = ((Cursor) peopleCursor).getString(((Cursor) peopleCursor)
.getColumnIndex(ContactsContract.Contacts._ID));
hasPhone = ((Cursor) peopleCursor)
.getString(((Cursor) peopleCursor)
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
}
case PHONES_LOADER:
if ((Integer.parseInt(hasPhone) > 0)){
CursorLoader phonesCursor = new CursorLoader(
context, // Parent activity context
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, // Table to query
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, // Projection to return
null, // No selection clause
null // No selection arguments
// Default sort order
);
while (((Cursor) phonesCursor).moveToNext()){
//store numbers and display a dialog letting the user select which.
String phoneNumber = ((Cursor) phonesCursor).getString(
((Cursor) phonesCursor).getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Map<String, String> NamePhoneType = new ContactMap();
NamePhoneType.put("Name", contactName);
NamePhoneType.put("Phone", phoneNumber);
mPeopleList.add(NamePhoneType);
}
}
default:
// An invalid id was passed in
return null;
}
}
これはエラー部分です:
while (((Cursor) peopleCursor).moveToNext()) {
contactName = ((Cursor) peopleCursor).getString(((Cursor) peopleCursor)
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contactId = ((Cursor) peopleCursor).getString(((Cursor) peopleCursor)
.getColumnIndex(ContactsContract.Contacts._ID));
hasPhone = ((Cursor) peopleCursor)
.getString(((Cursor) peopleCursor)
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
}
エラーは、Cursor を CursorLoader にキャストしているためです。必要なメソッドが CursorLoader 型で使用できないため、別の方法を見つけることができません。
誰かが解決策を持っていますか?または、パフォーマンスを損なうことなく連絡先を自動完成させる別の方法はありますか? ありがとう!