Hi.
I tried with your code, it works.
Kindly check two things.
1. You should over 23 contacts, because you write "Uri myPerson =
ContentUris.withAppendedId( People.CONTENT_URI, 23 );"
2. You should write permission code in AndroidManifest.xml like below.
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ContentProviderExamples"
android:label="@string/app_name">
<intent-filter>
Have a good day!!
2009/8/26 Pankaj Godbole <[email protected]>
>
> Hello,
>
> I am learning about Content Providers, and tried the example from the
> official Android tutorial on the topic. Please see the code below:
>
>
> --------------------
>
> package com.example.devguide;
>
> import android.app.Activity;
> import android.content.ContentUris;
> import android.database.Cursor;
> import android.net.Uri;
> import android.os.Bundle;
> import android.provider.Contacts.People;
> import android.util.Log;
>
>
> public class ContentProviderExamples extends Activity {
> /** Called when the activity is first created. */
> @Override
> public void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
> setContentView(R.layout.main);
>
> /* Use the ContentUris method to produce the base URI
> * for the contact with _ID == 23. */
> Uri myPerson = ContentUris.withAppendedId( People.CONTENT_URI, 23 );
>
> /* Alternatively, use the Uri method to produce the base URI. */
> myPerson = Uri.withAppendedPath( People.CONTENT_URI, "23" );
>
> /* Query this particular record. */
> Cursor c = managedQuery( myPerson, null, null, null, null );
>
> /* Form an array specifying which columns to return. */
> String[] projection = new String[] { People._ID,
> //People._COUNT, //throws
> IllegalArgumentException
> People.NAME,
> People.NUMBER };
> Log.i( "CPE", "projection[] = " + projection );
>
> /* Get the base URI for the People table in the Contacts content
> provider. */
> Uri contacts = People.CONTENT_URI;
>
> /* Construct the query. */
> Cursor managedCursor = managedQuery( contacts,
> projection,
> null,
> null,
> People.NAME + " ASC" );
>
> showColumnData( managedCursor );
>
> Log.i( "CPE", "End of current code" );
>
> }
>
> private void showColumnData( Cursor c ) {
> if ( c.moveToFirst() ) {
> String name;
> String phoneNumber;
> String imagePath;
> int nameColumn = c.getColumnIndex( People.NAME );
> int phoneColumn = c.getColumnIndex( People.NUMBER );
>
> do {
> /* Obtain the field values. */
> name = c.getString( nameColumn );
> phoneNumber = c.getString( phoneColumn );
> Log.d( "CPE", "name = " + name + ", phone = " + phoneNumber );
>
> } while ( c.moveToNext() );
> }
> }
> }
>
> However, the example given did not work, because calling managedQuery with
> the array projection as one of the arguments resulted in a
> IllegalArgumentException (java.lang.IllegalArgumentException). Android says
> that the column "_count" which is the value of the element People._COUNT in
> array projection is invalid. Can anyone explain to me the reason for this
> exception, even though the names of all the columns are as per the API
> specification?
>
> Please see the output of LogCat below:
>
> 08-26 12:06:20.330: ERROR/AndroidRuntime(1112): java.lang.RuntimeException:
> Unable to start activity
> ComponentInfo{com.example.devguide/com.example.devguide.ContentProviderExamples}:
> java.lang.IllegalArgumentException: Invalid column _count
>
> Thanks,
> Pankaj Godbole,
>
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Beginners" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en
-~----------~----~----~----~------~----~------~--~---