I have developed a generic HTTP functionality using Android Asynctask and Apache HTTP client. Please review the code and let me know if it is the right way of doing or there are other ways to achieve it. ***The Async Class*** public class HTTPAsyncTask extends AsyncTask<String, Void, String> { private CallBack mCb; HashMap<Object, Object> mData = null; //List<NameValuePair> mParams= new ArrayList<NameValuePair>(); HashMap<Object, Object> mParams = new HashMap<Object, Object>(); String mTypeOfRequest; String mStrToBeAppended = ""; boolean isPostDataInJSONFormat = false; JSONObject mJSONPostData = null; Context mContext = null; public HTTPAsyncTask(Context context, CallBack c, HashMap<Object, Object> data, JSONObject jsonObj, String request) { mContext = context; mCb = c; mTypeOfRequest = request; mJSONPostData = jsonObj; //Log.i("JSONDATA", mJSONPostData.toString()); if((data != null) && (jsonObj == null)){ mData = data; if(mTypeOfRequest.equalsIgnoreCase("GET")){ Object key = null; Iterator<Object> it = mData.keySet().iterator(); while(it.hasNext()){ key = it.next(); mParams.put(key, mData.get(key)); } for (int i = 0; i<mParams.size()-1; i++){ mStrToBeAppended+= "?" + key + "=" + mParams.get(key) + "&"; } //add the last parameter without the "&" mStrToBeAppended+= "?" + key + "=" + mParams.get(key); } if(mTypeOfRequest.equalsIgnoreCase("POST")){ Object key = null; isPostDataInJSONFormat = false; Iterator<Object> it = mData.keySet().iterator(); while(it.hasNext()){ key = it.next(); mParams.put(key, mData.get(key)); } } } if ((mData == null) && (mJSONPostData != null) && (mTypeOfRequest.equalsIgnoreCase("POST") == true)){ isPostDataInJSONFormat = true; //Log.i("ISJSONDATA",Boolean.toString(isPostDataInJSONFormat) ); } } @Override protected String doInBackground(String... baseUrls) { //android.os.Debug.waitForDebugger(); publishProgress(null); if(mTypeOfRequest.equalsIgnoreCase("GET")){ String finalURL = baseUrls[0]+ mStrToBeAppended; return HttpUtility.GET(finalURL); } if (mTypeOfRequest.equalsIgnoreCase("POST")){ if(isPostDataInJSONFormat == false){ return HttpUtility.POST(baseUrls[0],mParams ); } if(isPostDataInJSONFormat == true){ Log.i("JSONDATAPOSTMETHOd","JSON POST method to be called..."); return HttpUtility.POST(baseUrls[0], mJSONPostData); } } return null; } // onPostExecute displays the results of the AsyncTask. @Override protected void onPostExecute(String result) { //if(mContext != null){ mCb.onResult(result); //} } @Override protected void onProgressUpdate(Void...voids ) { //if(mContext != null){ mCb.onProgress(); //} } } ***The HTTPUtility Class*** public class HttpUtility { private final static HttpClient mHhttpclient = new DefaultHttpClient(); public static String GET(String url){ InputStream inputStream = null; String result = ""; try { // create HttpClient //HttpClient httpclient = new DefaultHttpClient(); // make GET request to the given URL HttpResponse httpResponse = mHhttpclient.execute(new HttpGet(url)); // receive response as inputStream inputStream = httpResponse.getEntity().getContent(); // convert inputstream to string if(inputStream != null){ result = convertInputStreamToString(inputStream); //inputStream.close(); } else result = "Did not work!"; } catch (Exception e) { Log.d("InputStream", e.getLocalizedMessage()); } return result; } public static String POST(String url, HashMap<Object, Object> mParams){ InputStream inputStream = null; String result = ""; try{ //HttpClient httpclient = new DefaultHttpClient(); HttpPost post = new HttpPost(url); post.setEntity(new UrlEncodedFormEntity((List<? extends NameValuePair>) mParams, "UTF-8")); HttpResponse httpResponse = mHhttpclient.execute(post); // receive response as inputStream inputStream = httpResponse.getEntity().getContent(); // convert inputstream to string if(inputStream != null){ result = convertInputStreamToString(inputStream); //inputStream.close(); } else result = "Did not work!"; } catch (Exception e) { Log.d("InputStream", e.getLocalizedMessage()); } return result; } public static String POST(String url, JSONObject obj){ Log.i("JSONPOSTBEGIN", "Beginning of JSON POST"); InputStream inputStream = null; String result = ""; //HttpClient httpclient = new DefaultHttpClient(); try{ HttpPost post = new HttpPost(url); post.setHeader("Content-type", "application/json"); post.setHeader("Accept", "application/json"); StringEntity se = new StringEntity(obj.toString()); //se.setContentType("application/json;charset=UTF-8"); se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); post.setEntity(se); HttpResponse httpResponse = mHhttpclient.execute(post); // receive response as inputStream inputStream = httpResponse.getEntity().getContent(); // convert inputstream to string if(inputStream != null){ result = convertInputStreamToString(inputStream); } else result = "Did not work!"; } catch (Exception e) { Log.d("InputStream", e.getLocalizedMessage()); } Log.i("JSONPOSTEND", "End of JSON data post methos..."); return result; } public static String convertInputStreamToString(InputStream inputStream) throws IOException{ BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream)); String line = ""; String result = ""; while((line = bufferedReader.readLine()) != null) result += line; inputStream.close(); return result; } } ***The Callback interface*** public interface CallBack { public void onProgress(); public void onResult(String result); public void onCancel(); } ***The Main Activity Class*** **Inside the Activity class** final CallBack c = new CallBack(){ @Override public void onProgress() { // TODO Auto-generated method stub mProgressDialog.show(); } @Override public void onResult(String result) { // TODO Auto-generated method stub mProgressDialog.dismiss(); mStrResult = result; Toast.makeText(getApplicationContext(), mStrResult, Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { // TODO Auto-generated method stub } }; **And then the Asynctask is called inside the Activity like the following** //testing GET without parameters.... String url = "http://hmkcode.appspot.com/rest/controller/get.json"; mHttpAsyncTaskGET = new HTTPAsyncTask(c, null,null "GET"); mHttpAsyncTaskGET.execute(url); //testing GET with parameters //testing POST with data String url= "https://selfsolve.apple.com/wcResults.do"; mData.put("sn", "C02G8416DRJM"); mData.put("cn", ""); mData.put("locale", ""); mData.put("caller", ""); mData.put("num", "12345"); mHttpAsyncTaskPOST = new HTTPAsyncTask(c, mData,null, "POST"); mHttpAsyncTaskPOST.execute(url);