***Updated code for missing field. I am now getting the following error:
Caused by: BackendlessException{ code: ‘1110’, message: ‘Column ‘nextmeterread’ specified twice’, extendedData: ‘{}’, detail: ‘Column ‘nextmeterread’ specified twice’ }
at com.backendless.Invoker$SyncResponder.errorHandler(Invoker.java:122)
at com.backendless.core.responder.AdaptingResponder.responseHandler(AdaptingResponder.java:79)
This makes it appear that java.Date objects don’t translate to Backendless DateTime objects? Is there a way to map this correctly?
Here’s the java.Date I’m attempting (Sun Jan 24 12:57:56 CST 2021)
Expected Behavior
- Save action is supposed to find existing record, by objectId, and update
Actual Behavior
- Device is queried from database, a field is altered, and save is called
- Save completes with no errors, but there is a new record in the table instead of updating existing
Note:
When debugging and stopping just before the save, I can confirm the object has the “ObjectId” field filled in with the correct value from the database, so I know it is pulling the information.
Object class:
public class Device {
//region fields
@MapToProperty(property = “objectId”)
private String ObjectId;
@MapToProperty(property = "meterreadingperiod")
private String MeterReadingPeriod;
@MapToProperty(property = “nextmeterread”)
private Date NextMeterRead;
…
}
Code to retrieve object, update field and save:
try {
String whereClause = "objectId = '" + deviceIds[0] + "'";
DataQueryBuilder queryBuilder = DataQueryBuilder.create();
queryBuilder.setWhereClause(whereClause);
device = Backendless.Data.of(Device.class).find(queryBuilder).get(0);
} catch (Exception e) {
Log.e("MeterReading", "error: can't load device: " + e.toString());
}
Log.i("MeterReading", "after device load");
if (device != null) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar c = Calendar.getInstance();
c.setTime(new Date());
//Default to Annual (1 year from now)
c.add(Calendar.DATE, 365);
if (device.getMeterReadingPeriod().equalsIgnoreCase("QUARTERLY"))
c.add(Calendar.DATE, 90);
nextMeterReadingDate = c.getTime();
device.setNextMeterRead(nextMeterReadingDate);
Backendless.Persistence.save(device);
Log.i("MeterReading", "after device save for meter reading update");
messageText.append("Meter Reading submitted, next reading reminder set: ")
.append(sdf.format(c.getTime()));
} else {
Log.e("MeterReading", "error: cant find Device");
messageText.delete(0, messageText.length());
messageText.append("Error: Device not found!");
}