Skip to main content
8 of 15
Rollback to Revision 6
Jamal
  • 34.9k
  • 13
  • 133
  • 237

Generic HTTP using Android Asynctask

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<String, String> mData = null;
    List<NameValuePair> mParams= new ArrayList<NameValuePair>();
    String mTypeOfRequest;
    String mStrToBeAppended = "";
    boolean isPostDataInJSONFormat = false;
    JSONObject mJSONPostData = null;
    
    public HTTPAsyncTask(CallBack c, HashMap<String, String> data, JSONObject jsonObj, String request) {
        mCb = c;
        mTypeOfRequest = request;
        mJSONPostData = jsonObj;
        if((data != null) && (jsonObj == null)){
            mData = data;
            if(mTypeOfRequest.equalsIgnoreCase("GET")){
                Iterator<String> it = mData.keySet().iterator();
                while(it.hasNext()){
                    String key = it.next();
                    mParams.add(new BasicNameValuePair(key, mData.get(key)));
                }
                for (int i = 0; i<mParams.size()-1; i++){
                    mStrToBeAppended+= "?" + mParams.get(i).getName() + "=" + mParams.get(i).getValue() + "&"; 
                }
                //add the last parameter without the "&"
                mStrToBeAppended+= "?" + mParams.get(mParams.size()-1).getName() + "=" + mParams.get(mParams.size()-1).getValue();
                
            }
            
            if(mTypeOfRequest.equalsIgnoreCase("POST")){
                    Iterator<String> it = mData.keySet().iterator();
                    while(it.hasNext()){
                        String key = it.next();
                        mParams.add(new BasicNameValuePair(key, mData.get(key)));
                    }
            }
        
        }
        if ((mData == null) && (jsonObj != null)){
            isPostDataInJSONFormat = true;
        }
        
    }
    
    
    @Override
    protected String doInBackground(String... baseUrls) {
        
        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 );
            }
            else {
                return HttpUtility.POST(baseUrls[0], mJSONPostData);
            }
        
        }
        
        return null;
    
    }
    // onPostExecute displays the results of the AsyncTask.
    @Override
    protected void onPostExecute(String result) {
       mCb.onResult(result);
       
       
   }
    
    @Override
    protected void onProgressUpdate(Void...voids ) {
        mCb.onProgress();
   }
}

The HTTPUtility Class

public class HttpUtility {
    
    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 = httpclient.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, List<NameValuePair> mParams){
        InputStream inputStream = null;
        String result = "";
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost post = new HttpPost(url);
            post.setEntity(new UrlEncodedFormEntity(mParams, "UTF-8"));
            HttpResponse httpResponse = httpclient.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){
        
        InputStream inputStream = null;
        String result = "";
        
        HttpClient httpclient = new DefaultHttpClient();

        try{
            HttpPost post = new HttpPost(url);
            post.setHeader("Content-type", "application/json");
            
            StringEntity se = new StringEntity(obj.toString()); 
            se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
            post.setEntity(se);
            
            HttpResponse httpResponse = httpclient.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());
        }
        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);