com.openideals.android.net.HttpManager.java Source code

Java tutorial

Introduction

Here is the source code for com.openideals.android.net.HttpManager.java

Source

/* 
 * Licensed 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 at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed 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 and
 * limitations under the License.
 */
package com.openideals.android.net;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

import android.util.Log;

/*
 * General HTTP handler class
 */
public class HttpManager {

    private final static String TAG = "HttpManager";

    private final static String POST_MIME_TYPE = "application/x-www-form-urlencoded";

    private final static String POST_MIME_TYPE_FILE = "multipart/form-data";

    public static String doGet(String serviceEndpoint, Properties props) throws Exception {

        HttpClient httpClient = new DefaultHttpClient();

        StringBuilder uriBuilder = new StringBuilder(serviceEndpoint);

        StringBuffer sbResponse = new StringBuffer();

        Enumeration<Object> enumProps = props.keys();
        String key, value = null;

        uriBuilder.append('?');

        while (enumProps.hasMoreElements()) {
            key = (String) enumProps.nextElement();
            value = (String) props.get(key);
            uriBuilder.append(key);
            uriBuilder.append('=');
            uriBuilder.append(java.net.URLEncoder.encode(value));
            uriBuilder.append('&');

        }

        HttpGet request = new HttpGet(uriBuilder.toString());
        HttpResponse response = httpClient.execute(request);

        int status = response.getStatusLine().getStatusCode();

        // we assume that the response body contains the error message
        if (status != HttpStatus.SC_OK) {
            ByteArrayOutputStream ostream = new ByteArrayOutputStream();
            response.getEntity().writeTo(ostream);
            Log.e("HTTP CLIENT", ostream.toString());

            return null;

        } else {
            InputStream content = response.getEntity().getContent();
            // <consume response>

            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;

            while ((line = reader.readLine()) != null)
                sbResponse.append(line);

            content.close(); // this will also close the connection
        }

        return sbResponse.toString();

    }

    public static String doPost(String serviceEndpoint, Properties props) throws Exception {

        HttpClient httpClient = new DefaultHttpClient();

        HttpPost request = new HttpPost(serviceEndpoint);
        HttpResponse response = null;
        HttpEntity entity = null;

        StringBuffer sbResponse = new StringBuffer();

        Enumeration<Object> enumProps = props.keys();
        String key, value = null;

        List<NameValuePair> nvps = new ArrayList<NameValuePair>();

        while (enumProps.hasMoreElements()) {
            key = (String) enumProps.nextElement();
            value = (String) props.get(key);
            nvps.add(new BasicNameValuePair(key, value));

            Log.i(TAG, "adding nvp:" + key + "=" + value);
        }

        UrlEncodedFormEntity uf = new UrlEncodedFormEntity(nvps, HTTP.UTF_8);

        Log.i(TAG, uf.toString());

        request.setEntity(uf);

        request.setHeader("Content-Type", POST_MIME_TYPE);

        Log.i(TAG, "http post request: " + request.toString());

        // Post, check and show the result (not really spectacular, but works):
        response = httpClient.execute(request);
        entity = response.getEntity();

        int status = response.getStatusLine().getStatusCode();

        // we assume that the response body contains the error message
        if (status != HttpStatus.SC_OK) {
            ByteArrayOutputStream ostream = new ByteArrayOutputStream();
            entity.writeTo(ostream);

            Log.e(TAG, " error status code=" + status);
            Log.e(TAG, ostream.toString());

            return null;
        } else {
            InputStream content = response.getEntity().getContent();
            // <consume response>

            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;

            while ((line = reader.readLine()) != null)
                sbResponse.append(line);

            content.close(); // this will also close the connection

            return sbResponse.toString();
        }

    }

    public static String uploadFile(String serviceEndpoint, Properties properties, String fileParam, String file)
            throws Exception {

        HttpClient httpClient = new DefaultHttpClient();

        HttpPost request = new HttpPost(serviceEndpoint);
        MultipartEntity entity = new MultipartEntity();

        Iterator<Map.Entry<Object, Object>> i = properties.entrySet().iterator();
        while (i.hasNext()) {
            Map.Entry<Object, Object> entry = (Map.Entry<Object, Object>) i.next();
            String key = (String) entry.getKey();
            String val = (String) entry.getValue();
            entity.addPart(key, new StringBody(val));
        }
        File upload = new File(file);
        Log.i("httpman", "upload file (" + upload.getAbsolutePath() + ") size=" + upload.length());

        entity.addPart(fileParam, new FileBody(upload));
        request.setEntity(entity);

        HttpResponse response = httpClient.execute(request);
        int status = response.getStatusLine().getStatusCode();

        if (status != HttpStatus.SC_OK) {

        } else {

        }

        return response.toString();

    }

}