/** * Copyright (c) 2013-2014. Francisco Contreras, Holland Salazar. * Copyright (c) 2015. Tobias Strebitzer, Francisco Contreras, Holland Salazar. * All rights reserved. * <p/> * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * <p/> * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * Neither the name of the Baker Framework nor the names of its contributors may be used to * endorse or promote products derived from this software without specific prior written * permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.bakerframework.baker.handler; import android.util.Log; import com.google.gson.Gson; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import java.io.IOException; public class ApiRequestHandler { private final String url; private final HttpClient httpclient; private HttpRequestBase request; private int statusCode; private String responseText; public ApiRequestHandler(String url) { this.url = url; httpclient = new DefaultHttpClient(); } public boolean get() { request = new HttpGet(url); try { execute(); return true; } catch (IOException e) { onError(new ApiResponseException(10000, e.getMessage())); } catch (ApiResponseException e) { onError(e); } return false; } public boolean post(Object params) { request = new HttpPost(url); try { Gson gson = new Gson(); ((HttpPost) request).setEntity(new StringEntity(gson.toJson(params))); execute(); return true; } catch (IOException e) { onError(new ApiResponseException(10000, e.getMessage())); } catch (ApiResponseException e) { onError(e); } return false; } private void execute() throws IOException, ApiResponseException { responseText = null; request.addHeader("content-type", "application/json;charset=UTF-8"); HttpResponse response = httpclient.execute(request); statusCode = response.getStatusLine().getStatusCode(); if(response.getEntity() != null) { responseText = EntityUtils.toString(response.getEntity(), "UTF-8"); } if (statusCode < 200 || statusCode >= 300) { throw new ApiResponseException(statusCode, responseText); } } public void cancel() { if(request != null && !request.isAborted()) { request.abort(); request = null; } } public void onError(Throwable throwable) { Log.e("ApiRequestHandler", throwable.getMessage()); } public String getResponseText() { return (responseText == null) ? "" : responseText; } public int getStatusCode() { return statusCode; } public <T> T getResponseObject(Class responseClass) { Gson gson = new Gson(); return (T) gson.fromJson(getResponseText(), responseClass); } private class ApiResponseException extends Exception { private final int statusCode; public ApiResponseException(int statusCode, String message) { super(message); this.statusCode = statusCode; } public int getStatusCode() { return statusCode; } } }