-
Notifications
You must be signed in to change notification settings - Fork 14
REST Json
Como você já deve saber, temos duas versões do serviço eQuizmo. Uma versão disponibiliza os dados através de REST e outra através de SOAP. Fizemos destas duas formas para você possa ter à sua disposição dois exemplos de conexão a serviços. Nesta seção, vamos falar sobre como você pode se conectar ao nosso servidor usando o REST no Android.
Não! Não precisa ter nenhuma biblioteca externa para conectar e tratar o retorno de serviços REST/Json. Para falar a verdade, você faz uma conexão HTTP normal e depois basta tratar o retorno usando a biblioteca org.json que já vem nativamente no Android. Fácil, não é? Vamos lá.
Você vai encontrar todos os serviços REST do eQuizmo no pacote br.gov.serpro.equizmo.service.rest. Lá temos todas as classes com o código necessário para conectar no nosso serviço REST.
Vamos dar uma olhadinha na classe CategoryServiceRest.java, que está logo abaixo. Observe que temos uma classe chamada HttpUtil.java. Ela é responsável em fazer a conexão HTTP no servidor e obter a resposta. Esta resposta será simplesmente um texto, uma String contendo a resposta em JSON. Simples assim!
Agora, nós temos que passar esta resposta para um objeto do tipo JSONArray, iterar neste Array e criar os objetos Category a partir destas informações. Veja abaixo o código que faz isto.
public class CategoryServiceRest implements CategoryService {
@Override
public List<Category> getCategories() {
final List<Category> result = new ArrayList<Category>();
final String json = HttpUtil.doGet("http://quiz-exmo.rhcloud.com/rest/quiz/listCategories");
try {
final JSONArray jsonArray = new JSONArray(json);
for (int index = 0, total = jsonArray.length(); index < total; index++) {
result.add(new Category(jsonArray.getString(index)));
}
} catch (JSONException e) {
throw new RuntimeException(e);
}
return result;
}
}
Você quer ver como é a resposta do serviço? Basta clicar neste link http://quiz-exmo.rhcloud.com/rest/quiz/listCategories.
Bom, esta classe usa o projeto HttpClient da Apache! Mas fique tranquilo, pois você não precisa anexar nenhuma nova biblioteca ao seu projeto. O HttpClient da Apache já vem por padrão no Android. Fizemos um uso super simples do HttpClient, apenas para obter os dados de uma página usando o método HTTP chamado GET. Veja o código abaixo.
public class HttpUtil {
public static String doGet(String url) {
try {
URI uri = new URI(url);
HttpGet get = new HttpGet(uri);
HttpClient client = new DefaultHttpClient();
ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
public String handleResponse(final HttpResponse response) throws HttpResponseException, IOException {
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() >= 300) {
throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase());
}
HttpEntity entity = response.getEntity();
return entity == null ? null : EntityUtils.toString(entity, "UTF-8");
}
};
return client.execute(get, responseHandler);
} catch (ClientProtocolException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
}
Achou o código complexo? Não se preocupe. Na verdade, é bem simples. Só precisamos de 3 objetos para realizar a conexão: HttpGet, HttpClient e ResponseHandler. A única complicação está no ResponseHandler, pois ele trata a resposta obtida quando você chama um endereço. Basicamente, verifica se o status é 300 ou maior (neste caso, ele não conseguiu acessar a página) e caso seja, lança uma exceção.
Caso contrário, vai tratar a resposta que provavelmente será um texto contendo o JSON.