O objetivo deste guia é mostrar ao usuário como realizar chamadas de serviços rest tanto de forma síncrona como assíncrona.
A classe base para fazer requisições no SDK é a CallService. Trata-se de um Builder que implementa uma interface (RequestExecutor) responsável por definir a forma de execução da requisição.
A classe Builder do CallService possui 2 construtores:
O Builder pode receber algumas variações de propriedades de acordo com a necessidade do desenvolvedor através de Setters:
O objeto CallService será criado ao dar o comando .build() na criação do Builde. Confira baixo um exemplo de implementação:
CallService callService = new CallService.Builder(callBackGeneric).build(); ou CallService.Builder callServiceBuild = new CallService.Builder(callBackGeneric); callServiceBuild.setCache_type(CacheType.CACHE_NO); CallService callService = callServiceBuild.build();
O método de chamadas assíncronas baseia-se no uso de callbacks para retornar ao usuário o status de sucesso ou de falha da requisição efetuada.
Ao ser criado e usado como parâmetro no builder do CallService, o CallBackRequisition deve definir os tipos de classe para serem convertidos e (opcionalmente) os adapters para auxílio de conversão de tipos compostos de objetos.
A estrutura se baseia em:
O Padrão de retorno do CallBack é baseado em 2 métodos:
Atualmente suportamos 2 tipos de CallBacks:
Para executar o CallService no modo assíncrono basta chamar a função executeCallBack:
CallService callService = new CallService.Builder(new CallBackRequisition<PaginatedItemUsersVO>(PaginatedItemUsersVO.class) { @Override public void onRequisitionSuccess(PaginatedItemUsersVO obj, CacheStatus cacheStatus) { } @Override public void onRequisitionFail(FluigException e) { } }).build(); callService.getCurrentUser().executeCallBack();
Para usar o CallBackObjectRequisition:
CallService callService = new CallService.Builder(new CallBackObjectRequisition() { @Override public void onRequisitionSuccess(Object obj, CacheStatus cacheStatus) { byte[] byteArray = (byte[]) obj; Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); imageView.setImageBitmap(bitmap); } @Override public void onRequisitionFail(FluigException e) { } }).build(); callService.getPicture("adm", PictureWidth.SIZE_34).executeCallBack();
O método de chamadas síncronas se baseia na chamada direta de requisições.
O método de chamadas síncronas baseia-se na execução das requisições em Threads criadas pelo próprio desenvolvedor ou em AsyncTasks. Através desse método o desenvolvedor pode gerenciar como as requisições são criadas, executadas e talvez canceladas.
O objeto CallService precisa ser criado passando no construtor do Builder:
Para executar chamadas síncronas, o desenvolvedor precisa chamar o serviço executeSynchronized que retornará o objeto convertido ou não dependendo do que foi passado pelo construtor do CallService.Builder(). Além disso, requisições síncronas precisam tratar cláusula Throws ou circundar a chamada com Try Catch.
Thread thread = new Thread(new Runnable() { @Override public void run() { try { CallService callService = new CallService.Builder(PaginatedItemUsersVO.class, null).build(); PaginatedItemUsersVO paginatedItemUsersVO = (PaginatedItemUsersVO) callService.getCurrentUser().executeSynchronized(); } catch (Exception ex){ ex.printStackTrace(); } } }); thread.start();
O método de cancelamento permite interromper a execução de uma determinada requisição antes de devolver o status de sucesso ou falha.
O método de cancelamento só funciona para chamadas assíncronas, ou seja, só conseguirá ser cancelada a requisição que for criada por Thread interna usando o CallBack definido no construtor do CallService.
O cancelamento de requisições feitas pelo método síncrono só pode ser feito pelo próprio desenvolvedor já que é o mesmo que cria a Thread que controla a execução.
Para realizar o cancelamento de uma requisição do CallService, o modo é diferente da execução:
CallService callService = new CallService.Builder(new CallBackRequisition<PaginatedItemUsersVO>(PaginatedItemUsersVO.class) { @Override public void onRequisitionSuccess(PaginatedItemUsersVO obj, CacheStatus cacheStatus) { } @Override public void onRequisitionFail(FluigException e) { } }).build(); RequestExecutor requestExecutorCurrentUser = callService.getCurrentUser(); requestExecutorCurrentUser.executeCallBack(); requestExecutorCurrentUser.cancelRequest();