I have a switch case
over several int
s in java and in every case
i want to redifine the String[]
i set in the beginning of the method so i don't have to create several String[]
variables.
Here is an examples:
switch (datacontentprovider.sUriMatcher.match(uri)) {
case datacontentprovider.LOCATION:
String[] locationProjection = {
datacontentprovider.DatabaseHelper.COLUMN_LATITUDE,
datacontentprovider.DatabaseHelper.COLUMN_LONGITUDE,
datacontentprovider.DatabaseHelper.COLUMN_TIME,
datacontentprovider.DatabaseHelper.COLUMN_ACCURACY,
datacontentprovider.DatabaseHelper.COLUMN_PROVIDER };
break;
case datacontentprovider.PICTURE:
String[] pictureProjection = {
datacontentprovider.DatabaseHelper.COLUMN_PIC_LATITUDE,
datacontentprovider.DatabaseHelper.COLUMN_PIC_LONGITUDE,
datacontentprovider.DatabaseHelper.COLUMN_PIC_TIME,
datacontentprovider.DatabaseHelper.COLUMN_PIC_ACCURACY,
datacontentprovider.DatabaseHelper.COLUMN_PIC_URL };
break;
case datacontentprovider.ACCELEROMETER:
String[] accelerometerProjection = {
datacontentprovider.DatabaseHelper.COLUMN_ACCELEROMETER_X,
datacontentprovider.DatabaseHelper.COLUMN_ACCELEROMETER_Y,
datacontentprovider.DatabaseHelper.COLUMN_ACCELEROMETER_Z,
datacontentprovider.DatabaseHelper.COLUMN_ACCELEROMETER_TIME, };
break;
case datacontentprovider.SOUND:
String[] amplitudeProjection = {
datacontentprovider.DatabaseHelper.COLUMN_AMPLITUDE_AMPLITUDE,
datacontentprovider.DatabaseHelper.COLUMN_AMPLITUDE_TIME };
break;
case datacontentprovider.BATTERY:
String[] batteryProjection = {
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_STATUS,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_ISCHARGING,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_CHARGEPLUG,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_USBCHARGE,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_ACCHARGE,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_LEVEL,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_SCALE,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_BATTERYPCT,
datacontentprovider.DatabaseHelper.COLUMN_BATTERY_TIME};
break;
case datacontentprovider.ORIENTATION:
String[] orientationProjection = {
datacontentprovider.DatabaseHelper.COLUMN_ORIENTATION_AZIMUT,
datacontentprovider.DatabaseHelper.COLUMN_ORIENTATION_TIME };
break;
case datacontentprovider.LIGHT:
String[] lightProjection = {
datacontentprovider.DatabaseHelper.COLUMN_LIGHT_LUMINOSITY,
datacontentprovider.DatabaseHelper.COLUMN_LIGHT_TIME };
break;
default:
throw new SQLException("Failed to get table data " + uri);
}
but in java, at least, i can't create the String[]
variable and than reinitialize it inside every case
for what i want. Is there a better way to avoid all this replication? If it was i could have all the different attributions in the same variable.
You absolutely can reinitialize a string variable - but at the moment you're redeclaring it. Instead of:
String[] locationProjection = {
...
};
you want:
locationProjection = new String[] {
...
};
It's not entirely clear whether that's a good idea or not, mind you - you may want to use a List<T>
and create an unmodifiable list with each set of values. It seems an odd pattern to me... what are you trying to use this for? There may be a better approach.
See more on this question at Stackoverflow