How to implement complex queries using a Content Provider?

前端 未结 3 805
独厮守ぢ
独厮守ぢ 2021-02-05 23:11

I am asking this because I am not quite sure of how to work with Android Content Providers. I have a subset of my database with 8 tables and I need to create complex queries to

3条回答
  •  生来不讨喜
    2021-02-05 23:46

    Below code worked for me. Inside your Application's Content Provider:

    public static final String PATH_JOIN_TWO_TABLES = "my_path";
    
        public static final Uri URI_JOIN_TWO_TABLES =
                Uri.parse("content://" + AUTHORITY + "/" + PATH_JOIN_TWO_TABLES);
    
        private static final int ID_JOIN_TWO_TABLES = 1001;
    
        private static final UriMatcher sURIMatcher = new UriMatcher(
                UriMatcher.NO_MATCH);
    
        static {
            sURIMatcher.addURI(AUTHORITY,
                    PATH_JOIN_TWO_TABLES + "/#", ID_JOIN_TWO_TABLES );
        }
    
        @Nullable
        @Override
        public Cursor query(@NonNull Uri uri, String[] projection, String selection,String[] selectionArgs,
                            String sortOrder, CancellationSignal cancellationSignal) {
    
            int uriType = sURIMatcher.match(uri);
                switch (uriType) {
    
                    case ID_JOIN_TWO_TABLES:
                        return getWritableDatabase()
                                .rawQuery("select * from " +
                                        "table_one" + " LEFT OUTER JOIN "
                                        + "table_two" + " ON ("
                                        + "table_one.ID"
                                        + " = " + "table_two.id" + ")", null);
                }
            return super.query(uri, projection, selection, selectionArgs, sortOrder, cancellationSignal);
        }
    

    And while making the Query inside your Activity or Fragment:

     Cursor cursor = getActivity().getContentResolver()
                    .query(ContentUris.withAppendedId(MYContentProvider.URI_JOIN_TWO_TABLES, MyContentProvider.ID_JOIN_TWO_TABLES), null, null, null, null);
    

    Hope it works for you.

提交回复
热议问题