Arcadia
Arcadia

Reputation: 266

ContentProvider.Query - How to select the table I want using URIs?

I'm currently facing a database query issue. I have two tables, items and details with the following schema definition:

    items(_id, title, type)                        <--- _id is primary key
    details(_id, _itemid, name, quantity, dosis)   <--- _id is primary key. _itemid is foreign key

Furthermore I access my database via. my own contentProvider. In my activity I want to query the details table to get all tuples, however Im not sure how to "get" the table using URI's. My query is:

  Uri subItems = Uri.parse("content://tod.dosetracker.provider.Food");
  Cursor c = getContentResolver().query(
            subItems, 
            new String[] {"*"}, 
            "_itemid = " + _id, 
            null, 
            null);

In my ContentProvider class I have the following (extract):

    public static final String PROVIDER_NAME = "tod.dosetracker.provider.Food";
    public static final Uri CONTENT_URI_ITEMS = Uri.parse("content://" + PROVIDER_NAME + "/items");
    public static final Uri CONTENT_URI_DETAILS = Uri.parse("content://" + PROVIDER_NAME + "/details");

    public static final String _ID = "_id";
    public static final String _ITEMID = "_itemid";
    public static final String TITLE = "title";
    public static final String TYPE = "type";
    public static final String NAME = "name";
    public static final String DOSIS = "dosis";
    public static final String QUANTITY = "quantity";

    private static final int ITEM = 1;
    private static final int ITEM_ID = 2;
    private static final int DETAILS = 3;
    private static final int DETAILS_ID = 4;

    // URI resource matchers
    private static final UriMatcher uriMatcher;
    static {
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI(PROVIDER_NAME, "items", ITEM);
    uriMatcher.addURI(PROVIDER_NAME, "items/#", ITEM_ID);
    uriMatcher.addURI(PROVIDER_NAME, "details", DETAILS);
    uriMatcher.addURI(PROVIDER_NAME, "details/#", DETAILS_ID);
    }

    // Database reference name
    private SQLiteDatabase foodDB;

Upvotes: 1

Views: 1216

Answers (1)

Moog
Moog

Reputation: 10193

You are using the wrong content uri. Use the one you defined for your items instead(if you want items)

FoodContentProvider.CONTENT_URI_ITEMS

So your query would look like this (oh BTW just put null if you want all columns);

  Uri subItems = Uri.parse("content://tod.dosetracker.provider.Food");
  Cursor c = getContentResolver().query(
            CONTENT_URI_ITEMS, 
            null, 
            "_itemid = " + _id, 
            null, 
            null);

Upvotes: 3

Related Questions