연락처에서 연락처를 가져 오는 연락처 선택기가 있고 sharedPreferences에 여러 비트의 정보가 저장되어 있습니다. 공유 환경 설정에서 데이터를 보유하기 위해 조회 키를 사용하고 있습니다 (안드로이드 문서가 제안하는 것처럼)android에서 연락처 저장 및 검색
이 부분은 모두 괜찮아 보입니다. 조회 키를 얻고 저장합니다.
내 문제는 그때 조회 키를 통해 연락처를 찾는 연락처를 가져 오는에 와서 갔다하는 것은 때때로 null를 돌려 것으로 보인다다음 세부 사항 접촉 선택기에서 온
Contact lookup key from the contact picker: 850i%2bw7vj56otre6eqa9b9t7wa%3d%3d
Contact id: 2958
다음을 I 도 널이 "고해상도"를 수행 한 후
Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, Uri.encode("850i%2bw7vj56otre6eqa9b9t7wa%3d%3d"));
Uri res = ContactsContract.Contacts.lookupContact(context.getContentResolver(), lookupUri);
: 연락처 ID를 얻기 위해 다음 코드를 사용하여 검색 키를 기반으로 연락처를 조회하려고 나는 ID가 연락처 선택 도구에서 나온 것처럼 유효하다는 것을 알고 있지만.
조회에서 고해상도의 URI를 기록 일부에서 퍼팅하는 것은 : (한 번 인코딩)
content://com.android.contacts/contacts/lookup/850i%252bw7vj56otre6eqa9b9t7wa%253d%253d
어떤 것은 내가 그것을해야한다 생각 것입니다. 누구든지 내가 잘못하고있는 것을 발견 할 수 있습니까?
대부분의 사람들 (나 자신을 포함해서)이 작동하지만, 어떤 사람들은이 문제를 겪고 있습니다.
감사합니다. 나는 그 중 하나도 갖고 있지 않았습니다. 연락처 선택 도구에서 값을 가져온 다음 인코딩을 수행 할 때 인코딩해야합니까? 내가 문제가있어 쉽게 시도 할 수없는 사용자에게 remotley를해야하는 까닭에 시험하기에 까다로운 방법입니다. 나는 그들과 함께 테스트 애플 리케이션을 가지고있어.연락처 선택 도구를 사용하게하면 조회 키가 표시됩니다. 그런 다음 연락처를 반복하고 다른 연락처 데이터를 검색하여 해당 사용자의 세부 정보를 얻으면 동일한 조회 키를 볼 수 있습니다. 유일한 차이점은 하나는 대문자이고 다른 하나는 그렇지 않은 것입니다. – Andrew
''decode() '를 사용하여 제안한 이유는 키가 이미 URI로 인코딩 되었기 때문입니다 ('%'의 존재로 판단). 또한, 키의'% 2b '는 16 진수의'+'입니다. '% 3d'는'='입니다. 끝에'=='을 쓰면 키 자체가 base64로 인코딩되었음을 의미합니다 (중요하지 않음). 어쨌든, 만일 * * URI가 그 키를 인코딩한다면,'%'문자 자체는 그 16 진수 형태로'% 25'로 인코딩됩니다, 나는 옳지 않다고 느꼈습니다. 그래서 대신 해독 할 것을 제안했습니다. 아마도 하나 이상의 문제가있을 것입니다. –
문서의 정보를 사용하여 답변을 편집했습니다. –