O que é uma classe contratual e como é utilizada

no Guia Dev Android recentemente actualizado, a documentação para os fornecedores de conteúdos contém uma secção intitulada classes de contratos. Embora exista um link para um exemplo de contatos, não ficou claro imediatamente o que é uma classe de contrato e como posso criar um para o meu fornecedor de conteúdo personalizado

Agradecia uma ajuda nisto.

Obrigado!

Author: Yogesh Umesh Vaity, 2012-02-11

4 answers

Uma classe de contrato define constantes que ajudam as aplicações a trabalhar com os URIs de conteúdo, nomes de colunas, ações de intenção e outras características do fornecedor. As classes contratuais não são incluídas automaticamente com um provedor; o desenvolvedor do provedor tem que defini-los e, em seguida, torná-los disponíveis para outros desenvolvedores.

Podes fazer a tua própria classe contratual e definir algumas constantes. Por exemplo, nomes de colunas que você pode mais tarde chamar em código que faz consultas para a base de dados etc.

Bom exemplo de como a classe de contrato é usada veja este tópico - Android-Como é que eu carrego uma foto de contacto?

 18
Author: evilone, 2017-05-23 12:26:05

O que é uma classe de contrato?

Uma classe contratual é uma public final classe que contém definições constantes para os URIs, nomes de colunas, tipos MIME e outros meta-dados sobre o ContentProvider. Também pode conter métodos auxiliares static para manipular o URIs.

Por que é utilizado?

    A classe de Contrato estabelece um contrato entre o conteúdo provedor e outras aplicações. Ele garante que o seu fornecedor de conteúdo pode ser acessado corretamente, mesmo se há alterações aos valores reais dos URIs, nomes das colunas, etc.
  1. Uma vez que fornece nomes mnemónicos para as suas constantes, os programadores são menos provável de utilizar valores incorrectos para nomes de colunas ou URIs.
  2. É fácil colocar a documentação Javadoc à disposição dos clientes que quer usar o seu fornecedor de conteúdo.

Como se utiliza?

Aqui está um excerto de classe de contrato de amostra concebido para um aplicativo meteorológico contendo duas tabelas: tabela meteorológica e mesa de localização. Os comentários e alguns métodos são ignorados para mantê-lo pequeno. Geralmente deve ser bem comentado.

public class WeatherContract {

    public static final String CONTENT_AUTHORITY = 
            "com.example.android.sunshine.app";
    public static final Uri BASE_CONTENT_URI = 
            Uri.parse("content://" + CONTENT_AUTHORITY);
    public static final String PATH_WEATHER = "weather";
    public static final String PATH_LOCATION = "location";

    /**Inner class that defines the table contents of the location table. */
    public static final class LocationEntry implements BaseColumns {
        public static final String TABLE_NAME = "location";
        public static final String COLUMN_LOCATION_SETTING = "location_setting";
        public static final String COLUMN_CITY_NAME = "city_name";
        public static final String COLUMN_COORD_LAT = "coord_lat";
        public static final String COLUMN_COORD_LONG = "coord_long";

        public static final Uri CONTENT_URI =
                BASE_CONTENT_URI.buildUpon().appendPath(PATH_LOCATION).build();

        // Custom MIME types
        public static final String CONTENT_TYPE =
                ContentResolver.CURSOR_DIR_BASE_TYPE +
                        "/" + CONTENT_AUTHORITY + "/" + PATH_LOCATION;

        public static final String CONTENT_ITEM_TYPE =
                ContentResolver.CURSOR_ITEM_BASE_TYPE +
                        "/" + CONTENT_AUTHORITY + "/" + PATH_LOCATION;

        // Helper method
        public static Uri buildLocationUri(long id) {
            return ContentUris.withAppendedId(CONTENT_URI, id);
        }
    }


    /** Inner class that defines the table contents of the weather table. */
    public static final class WeatherEntry implements BaseColumns {

        public static final String TABLE_NAME = "weather";

        public static final String COLUMN_LOC_KEY = "location_id";
        public static final String COLUMN_DATE = "date";
        public static final String COLUMN_WEATHER_ID = "weather_id";
        public static final String COLUMN_SHORT_DESC = "short_desc";
        public static final String COLUMN_MIN_TEMP = "min";
        public static final String COLUMN_MAX_TEMP = "max";
        public static final String COLUMN_HUMIDITY = "humidity";
        public static final String COLUMN_PRESSURE = "pressure";
        public static final String COLUMN_WIND_SPEED = "wind";
        public static final String COLUMN_DEGREES = "degrees";

        public static final Uri CONTENT_URI =
                BASE_CONTENT_URI.buildUpon().appendPath(PATH_WEATHER).build();

        public static final String CONTENT_TYPE =
                ContentResolver.CURSOR_DIR_BASE_TYPE + "/" + CONTENT_AUTHORITY + 
                        "/" + PATH_WEATHER;

        public static final String CONTENT_ITEM_TYPE =
                ContentResolver.CURSOR_ITEM_BASE_TYPE + "/" + CONTENT_AUTHORITY + 
                        "/" + PATH_WEATHER;

        // Helper method.
        public static Uri buildWeatherUri(long id) {
            return ContentUris.withAppendedId(CONTENT_URI, id);
        }

        .
        .
        .
    }
}
 22
Author: Yogesh Umesh Vaity, 2016-03-28 15:36:32

Contract é um container para constantes que definem nomes para tabelas e Colunas URIs. Ele também fornece as mesmas constantes em todas as outras classes do mesmo pacote.

 3
Author: Durgesh Gupta, 2015-01-29 13:18:05

A classe contratual é uma classe simples que possui as constantes de uma tabela que deve ser criada em SQL Lite DB. Podemos adicionar classes internas com base no número de tabelas necessárias. Fazer a classe de contrato final para que as constantes da tabela não possam ser alteradas.

A classe contratual funciona como um contentor das classes de tabela, não há necessidade de quaisquer outras alterações

As classes de tabela (classes interiores) podem ou não implementar BaseColumns .

Espero que isto dê uma imagem clara da classe contratual!! :-)
 0
Author: HariRam, 2019-10-12 10:31:29