REST API Client Library for Android REST API Client Library for Android android android

REST API Client Library for Android


Best implimentation I have seen based on Google IO Pro Tips 2010 is the RoboSpice library, which is REST based and very cleverly works with the Activity lifecycle as to not leak memory.

Quick infographic the library is here

  • Loaders are designed for database, not REST, they are reset on activity reset meaning you loose your data.
  • Async task, just no.
  • Intent Service + Result receiver is basically how RoboSpice work, so if you are building your own lib, I would take this approach!
  • Service is also good, similar to the IntentService Method, but IntentService works a little better in this instance.

The Service method maybe better, look at the robospice service they use an ExecutorService which terminates the Service when it has run out of Requests to work through, this is more Java concurrency than Android specific. Main thing to note that the service runs whilst processing requests then terminates its self if their are none left.

The advantage of using the ExecutorService or any type of thread pool, is that you can define how many requests you can run at once. unless you have a very fast connection 2-4 is the most i would ever suggest.


I've used Retrofit and it's really good library which provide an easy structure for managing endpoints and parse data/collections/object.

The documentation is complete enough to write easily you code.

CQFD > go for it


MAY BE THIS CLASS CAN HELP :-

/*Copyright 2014 Bhavit Singh SengarLicensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.*/package com.infotech.zeus.util;import java.io.IOException;import java.io.UnsupportedEncodingException;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import org.json.JSONException;import org.json.JSONObject;import android.widget.Toast;public class RestClient {        JSONObject data = new JSONObject();        String url;        String headerName;        String headerValue;        public RestClient(String s){            url = s;        }        public void addHeader(String name, String value){            headerName = name;            headerValue = value;        }        public void addParam(String key, String value){            try {                data.put(key, value);            } catch (JSONException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        public String executePost(){  // If you want to use post method to hit server            HttpClient httpClient = new DefaultHttpClient();            HttpPost httpPost = new HttpPost(url);            httpPost.setHeader(headerName, headerValue);            HttpResponse response = null;            String result = null;            try {                StringEntity entity = new StringEntity(data.toString(), HTTP.UTF_8);                httpPost.setEntity(entity);                response = httpClient.execute(httpPost);                HttpEntity entity1 = response.getEntity();                result = EntityUtils.toString(entity1);                return result;                //Toast.makeText(MainPage.this, result, Toast.LENGTH_LONG).show();            } catch (UnsupportedEncodingException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (ClientProtocolException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            return result;        }        public String executeGet(){ //If you want to use get method to hit server            HttpClient httpClient = new DefaultHttpClient();            HttpGet httpget = new HttpGet(url);            String result = null;            ResponseHandler<String> responseHandler = new BasicResponseHandler();            try {                result = httpClient.execute(httpget, responseHandler);            } catch (ClientProtocolException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            return result;        }}

A SIMPLE EXAMPLE TO USE THIS CLASS :

RestClient client = new RestClient("http://www.example.com/demo.php");  //Write your url here        client.addParam("Name", "Bhavit"); //Here I am adding key-value parameters        client.addParam("Age", "23");        client.addHeader("content-type", "application/json"); // Here I am specifying that the key-value pairs are sent in the JSON format        try {            String response = client.executePost(); // In case your server sends any response back, it will be saved in this response string.        } catch (Exception e) {            e.printStackTrace();        }