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 android-beginners@googlegroups.com
To unsubscribe from this group, send email to
android-beginners-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to