I used to use content resolver previously to fetch Contact list and their details while that still works I wanted to try the Loader method which queries the Content Provider in the background. I have looked at the documentation and sample code here :
http://developer.android.com/training/contacts-provider/retrieve-details.html
While I was able to display a list of Contacts without any problems, I am stuck at retrieving Phone Number of a particular contact on clicking it and showing it on a detail screen. The demo above shows address of the user on the detail screen, I even tried modifying it. I have changed the content URI from Contacts to ContactsContract.CommonDataKinds.Phone but I keep getting
java.lang.IllegalArgumentException: Invalid column data1
There is not a single detailed tutorial on the internet showing how it is done. Can someone here be kind enough to shed some light? Reading various other Stackoverflow questions I am oretty sure it has something to do with the 2 different CONTENT URI but again I could be wrong. Any help or pointers would be really appreciated. Thanks
Few of the SO Questions I have already looked at :
Get phone number from contact loader in android: projection crash
Logcat says "invalid column data1"
How to get contacts' phone number in Android
Obtaining phone number from lookup URI
None of them solve my problem. Here is the relevant code where it fails :
final static String[] PROJECTION = {
Contacts._ID,
Utils.hasHoneycomb() ? ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY : ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
//ContactsContract.CommonDataKinds.Phone.NUMBER,
};
The code works just fine, but the moment I remove the comment to fetch Phone Number it fails
This is an excerpt of what I actually do in my (working) code.
These are my relevant imports:
Given that id is a string (representing a number, like "1", "20", ...)
Hope it puts you on the right path
In my case the problem was with URI.
I was using this:
and I changed for this (Phone.CONTENT_URI) to resolve the problem and obtain the phone number:
This is the rest of the code:
Change Your Query URI.
You are using a URI that is not meant for searching/filtering those columns (e.g. phone numbers) on Contacts:
You need to use a URI that has access to the columns you're trying to filter on, like this:
Or maybe this one since you're searching phone numbers:
There's a decent breakdown of what URIs to use and when on the Android SDK Documentation: