SyncOrderService.java
public class SyncOrderService extends GcmTaskService { | |
//... | |
public static void scheduleOrderSending(Context context, int id) { | |
GcmNetworkManager manager = GcmNetworkManager.getInstance(context); | |
Bundle bundle = new Bundle(); | |
bundle.putInt(SyncOrderService.ORDER_ID, id); | |
OneoffTask task = new OneoffTask.Builder().setService(SyncOrderService.class) | |
.setTag(SyncOrderService.getTaskTag(id)) | |
.setExecutionWindow(0L, 30L) | |
.setExtras(bundle) | |
.setPersisted(true) | |
.setRequiredNetwork(Task.NETWORK_STATE_CONNECTED) | |
.build(); | |
manager.schedule(task); | |
} | |
//... | |
@Override public int onRunTask(TaskParams taskParams) { | |
int id = taskParams.getExtras().getInt(ORDER_ID); | |
if (id == 0) { | |
return GcmNetworkManager.RESULT_FAILURE; | |
} | |
Cursor c = null; | |
try { | |
c = getContentResolver().query( | |
KolGeneContract.OrderEntry.buildOrderUriWithIdAndStatus(id, Order.NOT_SYNCED), null, null, | |
null, null); | |
if (c == null) return GcmNetworkManager.RESULT_FAILURE; | |
Order order = new Order(); | |
if (c.moveToFirst()) { | |
order.getSelfFromCursor(c, order); | |
} else { | |
return GcmNetworkManager.RESULT_FAILURE; | |
} | |
OrderCreate orderCreate = order.createPostOrder(order); | |
List<LocationId> locationIds = new LabLocation().getLocationIds(this, order.getLocalId()); | |
orderCreate.setLabLocations(locationIds); | |
Response<Order> response = orderApi.createOrder(orderCreate).execute(); | |
if (response.isSuccessful()) { | |
if (response.code() == 201) { | |
Order responseOrder = response.body(); | |
responseOrder.setLocalId(id); | |
responseOrder.setSync(Order.SYNCED); | |
ContentValues values = responseOrder.getContentValues(responseOrder); | |
Uri uri = getContentResolver().update( | |
KolGeneContract.OrderEntry.buildOrderUriWithId(order.getLocalId()), values); | |
return GcmNetworkManager.RESULT_SUCCESS; | |
} | |
} else { | |
if (response.code() == 401) { | |
ClientUtils.broadcastUnAuthorizedIntent(getApplicationContext()); | |
} | |
} | |
} catch (IOException e) { | |
} finally { | |
if (c != null && !c.isClosed()) c.close(); | |
} | |
return GcmNetworkManager.RESULT_RESCHEDULE; | |
} | |
//... | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment