Che cos'è una classe di contratto?
Una classe contratto è una classe public
final
che contiene le definizioni costanti per l'URI, i nomi delle colonne, tipi MIME, e altri meta-dati sulla ContentProvider
. Può anche contenere i metodi di supporto static
per manipolare gli URI.
Perché viene utilizzato?
- La Classe contratto prevede un contratto tra il fornitore di contenuti e altre applicazioni. Assicura che il vostro fornitore di contenuti possibile accedere correttamente anche se ci sono cambiamenti ai valori effettivi di URI, i nomi delle colonne ecc
- Dal momento che fornisce nomi mnemonici per le sue costanti, gli sviluppatori sono meno probabilità di utilizzare valori non corretti per nomi di colonne o URI.
- È facile rendere disponibile ai client la documentazione Javadoc che desidera utilizzare il proprio provider di contenuti.
Come viene utilizzato?
Ecco uno snippet di classe Contract di esempio progettato per un'app meteo contenente due tabelle: tabella meteo e tabella posizione. I commenti e alcuni metodi vengono saltati per mantenerlo piccolo. Generalmente dovrebbe essere ben commentato.
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);
}
.
.
.
}
}
fonte
2016-03-28 15:36:32
Vedere anche http://stackoverflow.com/questions/17451931/how-to-use-a-contract-class-in-android – OneWorld