mardi 8 septembre 2015

Android - Content Provider - Choose SQL into query method

My android app has a content provider called MensagemProvider. I want to be able to run query1 or query2 for LIST URI into query method. How implement this and how to call from CursorLoader ? Thanks a lot!

public class MensagemProvider extends ContentProvider {

    private DBManager db;

    public static final String DATABASE_TABLE = "MENSAGEM";

    // Content Provider Uri and Authority
    public static final String AUTHORITY = "br.com.soma.provider.MensagemProvider";
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/mensagem");

    // MIME types used for listing amantes or looking up a single amante
    private static final String MENSAGENS_MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/vnd.br.com.soma.mensagens";
    private static final String MENSAGEM_MIME_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/vnd.br.com.soma.mensagem";

    // UriMatcher stuff
    private static final int LIST_MENSAGEM = 0;
    private static final int ITEM_MENSAGEM = 1;
    private static final UriMatcher URI_MATCHER = buildUriMatcher();

    private static UriMatcher buildUriMatcher() {
        UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
        matcher.addURI(AUTHORITY, "mensagem", LIST_MENSAGEM);
        matcher.addURI(AUTHORITY, "mensagem/#", ITEM_MENSAGEM);
        return matcher;
    }

    @Override
    public String getType(Uri uri) {
        switch (URI_MATCHER.match(uri)) {
            case LIST_MENSAGEM:
                return MENSAGENS_MIME_TYPE;
            case ITEM_MENSAGEM:
                return MENSAGEM_MIME_TYPE;
            default:
                throw new IllegalArgumentException("Unknown Uri: " + uri);
        }
    }


    @Override
    public Cursor query(Uri uri, String[] ignored1, String selection, String[] selectionArgs, String sortOrder) {

        Cursor c;
        switch (URI_MATCHER.match(uri)) {
            case LIST_MENSAGEM:
                c = db.getReadableDatabase().query(DATABASE_TABLE, projection, selection, selectionArgs, null, null, sortOrder);
                break;
            case ITEM_MENSAGEM:
                c = db.getReadableDatabase().query(DATABASE_TABLE, projection, COLUMN_MENSAGEMID + "=?", new String[]{Long.toString(ContentUris.parseId(uri))}, null, null, null, null);
                if (c.getCount() > 0) {
                    c.moveToFirst();
                }
                break;
            default:
                throw new IllegalArgumentException("Unknown Uri: " + uri);
        }
        c.setNotificationUri(getContext().getContentResolver(), uri);
        return c;

    }

}

In my fragment

@Override
public Loader<Cursor> onCreateLoader(int ignored, Bundle args) {
    return new CursorLoader(getActivity(), MensagemProvider.CONTENT_URI, null, null, null, null);
}

Aucun commentaire:

Enregistrer un commentaire