Android の Uri について 1 つ質問があります。友人のコードに従って、ユーザーから連絡先を選択するインテントを起動し、onActivityResult
メソッドで結果を管理していました。
すべて問題ないように見え、最初の引数として Uri を使用したクエリで連絡先情報にアクセスできます。問題は、後で (アプリケーションの別の実行時に) ユーザー情報にアクセスするためにその Uri を保存しようとすることです。toString()
Uri を両方とも文字列として保存しようとしましgetEncodedPath()
たが、一見有効な Uri を返しますが、解析された Uri を渡す名前を取得するために同じコードを実行しようとすると、null が返されます。
以前に名前を取得したので null ではないことはわかっていますが、何が間違っているのかわかりません。ありがとうございました!
onActivityResult 内の名前を取得するためのコード(動作します):
Uri contactData = data.getData();
Cursor lookupCursor = this.getContentResolver().query(contactData, null, null, null, null);
if (lookupCursor.moveToFirst()) {
String lookupKey = lookupCursor.getString(lookupCursor.getColumnIndexOrThrow(android.provider.ContactsContract.PhoneLookup.LOOKUP_KEY));
lookupCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY + " LIKE '" + lookupKey + "'", null, null);
if (lookupCursor.moveToFirst()) {
int nameIdx = lookupCursor.getColumnIndex(Phone.DISPLAY_NAME);
String name = lookupCursor.getString(nameIdx);
}
}
別の場所で、カスタム クラスからとはいえ、同じコードを実行していますが、コンテキストを渡して contentResolver を取得しています。ただし、連絡先選択インテントによって返された正確な文字列をコピーする場合でも、 parse メソッドの呼び出しがUri
返されます。null
私は途方に暮れています:(