Saltar al contenido

¿Qué es una clase de contrato y cómo se utiliza?

Ya no tienes que indagar más en otros sitios porque has llegado al sitio exacto, contamos con la solución que necesitas sin problemas.

Solución:

¿Qué es una clase de contrato?

Una clase de contrato es un publicfinal clase que contiene definiciones constantes para los URI, nombres de columna, tipos MIME y otros metadatos sobre el ContentProvider. También puede contener static métodos auxiliares para manipular los URI.

¿Por qué se usa?

  1. La clase de contrato establece un contrato entre el proveedor de contenido y otras aplicaciones. Garantiza que se pueda acceder correctamente a su proveedor de contenido incluso si hay cambios en los valores reales de URI, nombres de columna, etc.
  2. Dado que proporciona nombres mnemotécnicos para sus constantes, es menos probable que los desarrolladores utilicen valores incorrectos para los nombres de columna o URI.
  3. Es fácil hacer que la documentación de Javadoc esté disponible para los clientes que desean usar su proveedor de contenido.

¿Cómo se usa?

Aquí hay un fragmento de clase de contrato de muestra diseñado para una aplicación meteorológica que contiene dos tablas: tabla meteorológica y tabla de ubicación. Los comentarios y algunos métodos se omiten para mantenerlo pequeño. En general debe estar bien 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);
        

        .
        .
        .
    

Una clase de contrato define constantes que ayudan a las aplicaciones a trabajar con los URI de contenido, los nombres de columna, las acciones de intención y otras características de un proveedor de contenido. Las clases de contrato no se incluyen automáticamente con un proveedor; el desarrollador del proveedor tiene que definirlos y luego ponerlos a disposición de otros desarrolladores.

Puede crear su propia clase de contrato y definir algunas constantes allí. Por ejemplo, nombres de columna que luego puede llamar en código que realiza consultas a la base de datos, etc.

Buen ejemplo de cómo se usa la clase de contrato, vea este hilo Android: ¿Cómo cargo una foto de contacto?

Contract es un contenedor de constantes que definen nombres para tablas y columnas de URI. También proporciona las mismas constantes en todas las demás clases del mismo paquete.

Valoraciones y comentarios

Recuerda mostrar este artículo si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *