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 public
final
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?
- 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.
- 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.
- 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.