Skip to content Skip to sidebar Skip to footer

Problem With Android Http Post

I am using the below code to execute a HTTP POST request. The PostData is in the form of a String Sample of PostData: urn:marlin:broad band:1-1:registr ation-service:li nkAcquisit

Solution 1:

Here is my implementation and it works for post and get. You can compare the setup with yours.

/**
 * Allows you to easily make URL requests
 * 
 * 
 * @author Jack Matthews
 * 
 */classHttpUrlRequestextendsThread {

    privatestatic final StringTAG = "HttpUrlRequest";
    privatestatic final HttpClient httpClient;



    static {
        HttpParams params = newBasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
        HttpProtocolParams.setUseExpectContinue(params, false);  
        HttpConnectionParams.setConnectionTimeout(params, 10000);
        HttpConnectionParams.setSoTimeout(params, 10000);
        ConnManagerParams.setMaxTotalConnections(params, 100);
        ConnManagerParams.setTimeout(params, 30000);

        SchemeRegistry registry = newSchemeRegistry();
        registry.register(newScheme("http",PlainSocketFactory.getSocketFactory(), 80));
        registry.register(newScheme("https",PlainSocketFactory.getSocketFactory(), 80));
        ThreadSafeClientConnManager manager = newThreadSafeClientConnManager(params, registry);
        httpClient = newDefaultHttpClient(manager, params);
        //httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
    }


    //user supplied variablesprivateString host = null;
    private int port = 80;
    privateString path = null;
    privateList<NameValuePair> query = null;
    privateList<NameValuePair> post = null;
    privateHandler handler = null;
    privateHttpResponseWrapper callbackWrapper = null;
    privateString scheme = "http";


    /**
     * Used to setup a request to a url
     * 
     * @paramhost
     * @paramport
     * @parampath
     * @paramquery
     * @parampost
     * @paramhandler
     * @paramcallbackWrapper
     */privateHttpUrlRequest(String scheme, String host, int port, String path, List<NameValuePair> query,  List<NameValuePair> post, Handler handler, HttpResponseWrapper callbackWrapper) {
        this.scheme = scheme;
        this.host = host;
        this.port = port;
        this.path = path;
        this.query = query;
        this.post = post;
        this.handler = handler;
        this.callbackWrapper = callbackWrapper;
    }




    /**
     * Use this class if your class is implementing HttpResponseListener.
     * Creates the request inside it's own Thread automatically.
     * <b>run() is called automatically</b>
     * 
     * @paramhost
     * @paramport
     * @parampath
     * @paramqueryString
     * @parampostData
     * @paramrequestCode
     * @paramcallback
     * 
     * @seeHttpResponseListener
     */publicstaticvoidsendRequest(String scheme, String host, int port, String path, List<NameValuePair> queryString, List<NameValuePair> postData, int requestCode, HttpResponseListener callback) {
        (newHttpUrlRequest(scheme, host, port, path, queryString, postData, newHandler(),newHttpResponseWrapper(callback,requestCode))).start();
    }


    /**
     * Use this method if you want to control the Threading yourself.
     * 
     * @paramhost
     * @paramport
     * @parampath
     * @paramqueryString
     * @parampostData
     * @return
     */publicstaticHttpResponsesendRequestForImmediateResponse(String scheme,String host, int port, String path, List<NameValuePair> queryString, List<NameValuePair> postData) {
        HttpUrlRequest req = newHttpUrlRequest(scheme, host, port, path, queryString, postData, null, null);
        return req.runInCurrentThread();
    }



    /**
     * Runs the request in the current Thread, use this if you
     * want to mananage Threading yourself through a thread pool etc.
     * 
     * @returnHttpResponse
     */privateHttpResponserunInCurrentThread() {
        if(post==null) {
            returnsimpleGetRequest();
        } else {
            returnsimplePostRequest();
        }
    }




    @Overridepublicvoidrun() {
        //Determine the appropriate method to useif(post==null) {
            callbackWrapper.setResponse(simpleGetRequest());
            handler.post(callbackWrapper);
        } else {
            callbackWrapper.setResponse(simplePostRequest());
            handler.post(callbackWrapper);
        }
    }





    /**
     * Send a GET request
     * 
     * @return HttpResponse or null if an exception occurred
     * 
     */privateHttpResponsesimpleGetRequest() {
        try {
            //Add lang to query string
            query.add(newBasicNameValuePair("lang", getLanguageInJoomlaFormat()));
            URI uri = URIUtils.createURI(scheme, host, port, path, URLEncodedUtils.format(query, HTTP.UTF_8), null);

            if(Logging.DEBUG) Log.d(TAG, uri.toString());

            //GET methodHttpGet method = newHttpGet(uri);
            HttpResponse response = httpClient.execute(method);
            //HttpEntity entity = response.getEntity();if(response==null)
                returnNullHttpResponse.INSTANCE;
            elsereturn response;

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

        returnNullHttpResponse.INSTANCE;
    }





    /**
     * Send a POST request
     * 
     * 
     * @return HttpResponse or null if an exception occurred
     * 
     */privateHttpResponsesimplePostRequest() {
        try {
            //Add lang to query string
            query.add(newBasicNameValuePair("lang", getLanguageInJoomlaFormat() ));

            URI uri = URIUtils.createURI(scheme, host, port, path, URLEncodedUtils.format(query, HTTP.UTF_8), null);

            if(Logging.DEBUG) Log.d(TAG, uri.toString());

            //POST methodHttpPost postMethod=newHttpPost(uri);      
            postMethod.setEntity(newUrlEncodedFormEntity(post, HTTP.UTF_8));
            HttpResponse response = httpClient.execute(postMethod);
            //HttpEntity entity = response.getEntity();if(response==null)
                returnNullHttpResponse.INSTANCE;
            elsereturn response;

        } catch (UnsupportedEncodingException e) {
            if(Logging.ERROR) Log.e(TAG, "UnsupportedEncodingException", e);
        } catch (ClientProtocolException e) {
            if(Logging.ERROR) Log.e(TAG, "UnsupportedEncodingException", e);
        } catch (IOException e) {
            if(Logging.ERROR) Log.e(TAG, "UnsupportedEncodingException", e);
        } catch (URISyntaxException e) {
            if(Logging.ERROR) Log.e(TAG, "UnsupportedEncodingException", e);
        }

        returnNullHttpResponse.INSTANCE;
    }




    /**
     * Converts the language code to correct Joomla format
     * 
     * @return language in the (en-GB)
     */publicstaticStringgetLanguageInJoomlaFormat() {
        String joomlaName;
        String[] tokens = Locale.getDefault().toString().split("_");
        if (tokens.length >= 2 && tokens[1].length() == 2) {
            joomlaName = tokens[0]+"-"+tokens[1];
        } else {
            joomlaName = tokens[0]+"-"+tokens[0].toUpperCase();
        }
        return joomlaName;
    }





    /**
     * Creates a null http response
     * 
     * @author Jack Matthews
     *
     */privateenumNullHttpResponseimplementsHttpResponse {
        INSTANCE;

        @OverridepublicHttpEntitygetEntity() {
            returnnull;
        }

        @OverridepublicLocalegetLocale() {
            returnnull;
        }

        @OverridepublicStatusLinegetStatusLine() {
            returnnull;
        }

        @OverridepublicvoidsetEntity(HttpEntity entity) {

        }

        @OverridepublicvoidsetLocale(Locale loc) {

        }

        @OverridepublicvoidsetReasonPhrase(String reason) throws IllegalStateException {

        }

        @OverridepublicvoidsetStatusCode(int code) throws IllegalStateException {

        }

        @OverridepublicvoidsetStatusLine(StatusLine statusline) {

        }

        @OverridepublicvoidsetStatusLine(ProtocolVersion ver, int code) {

        }

        @OverridepublicvoidsetStatusLine(ProtocolVersion ver, int code, String reason) {

        }

        @OverridepublicvoidaddHeader(Header header) {

        }

        @OverridepublicvoidaddHeader(String name, String value) {

        }

        @OverridepublicbooleancontainsHeader(String name) {
            returnfalse;
        }

        @OverridepublicHeader[] getAllHeaders() {
            returnnull;
        }

        @OverridepublicHeadergetFirstHeader(String name) {
            returnnull;
        }

        @OverridepublicHeader[] getHeaders(String name) {
            returnnull;
        }

        @OverridepublicHeadergetLastHeader(String name) {
            returnnull;
        }

        @OverridepublicHttpParamsgetParams() {
            returnnull;
        }

        @OverridepublicProtocolVersiongetProtocolVersion() {
            returnnull;
        }

        @OverridepublicHeaderIteratorheaderIterator() {
            returnnull;
        }

        @OverridepublicHeaderIteratorheaderIterator(String name) {
            returnnull;
        }

        @OverridepublicvoidremoveHeader(Header header) {

        }

        @OverridepublicvoidremoveHeaders(String name) {

        }

        @OverridepublicvoidsetHeader(Header header) {

        }

        @OverridepublicvoidsetHeader(String name, String value) {

        }

        @OverridepublicvoidsetHeaders(Header[] headers) {

        }

        @OverridepublicvoidsetParams(HttpParams params) {

        }
    }

}

Solution 2:

//Creating xml file

DocumentBuilderFactorydbfac= DocumentBuilderFactory.newInstance();
         dbfac.setNamespaceAware(true);
         DocumentBuilderdocBuilder=null;
         try {
            docBuilder = dbfac.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         DOMImplementationdomImpl= docBuilder.getDOMImplementation();
         Documentdoc= domImpl.createDocument("http://coggl.com/InsertTrack","TrackEntry", null);
         doc.setXmlVersion("1.0");
         doc.setXmlStandalone(true);

         ElementtrackElement= doc.getDocumentElement();

         ElementCompanyId= doc.createElement("CompanyId");
         CompanyId.appendChild(doc.createTextNode("1"));
         trackElement.appendChild(CompanyId);

         ElementCreatedBy= doc.createElement("CreatedBy");
         CreatedBy.appendChild(doc.createTextNode("6"));
         trackElement.appendChild(CreatedBy);

         ElementDepartmentId= doc.createElement("DepartmentId");
         DepartmentId.appendChild(doc.createTextNode("4"));
         trackElement.appendChild(DepartmentId);

         ElementIsBillable= doc.createElement("IsBillable");
         IsBillable.appendChild(doc.createTextNode("1"));
         trackElement.appendChild(IsBillable);

         ElementProjectId= doc.createElement("ProjectId");
         ProjectId.appendChild(doc.createTextNode("1"));
         trackElement.appendChild(ProjectId);

         ElementStartTime= doc.createElement("StartTime");
         StartTime.appendChild(doc.createTextNode("2012-03-14 10:44:45"));
         trackElement.appendChild(StartTime);

         ElementStopTime= doc.createElement("StopTime");
         StopTime.appendChild(doc.createTextNode("2012-03-14 11:44:45"));
         trackElement.appendChild(StopTime);

         ElementTaskId= doc.createElement("TaskId");
         TaskId.appendChild(doc.createTextNode("3"));
         trackElement.appendChild(TaskId);

         ElementTotalTime= doc.createElement("TotalTime");
         TotalTime.appendChild(doc.createTextNode("1"));
         trackElement.appendChild(TotalTime);

         ElementTrackDesc= doc.createElement("TrackDesc");
         TrackDesc.appendChild(doc.createTextNode("dello testing"));
         trackElement.appendChild(TrackDesc);

         ElementTrackId= doc.createElement("TrackId");
         TrackId.appendChild(doc.createTextNode("0"));
         trackElement.appendChild(TrackId);

         TransformerFactorytransfac= TransformerFactory.newInstance();
         Transformertrans=null;
        try {
            trans = transfac.newTransformer();
        } catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
         trans.setOutputProperty(OutputKeys.INDENT, "yes");

         //create string from xml treeStringWritersw=newStringWriter();
         StreamResultresult=newStreamResult(sw);
         DOMSourcesource=newDOMSource(doc);
         try {
            trans.transform(source, result);
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         StringxmlString= sw.toString();

//posting xml file to server

DefaultHttpClienthttpClient=newDefaultHttpClient();

         HttpPosthttppost=newHttpPost("http://192.168.0.19:3334/cogglrestservice.svc/InsertTrack");     
         // Make sure the server knows what kind of a response we will accept
         httppost.addHeader("Accept", "text/xml");
         // Also be sure to tell the server what kind of content we are sending
         httppost.addHeader("Content-Type", "application/xml");

         try
         {
         StringEntityentity=newStringEntity(xmlString, "UTF-8");
         entity.setContentType("application/xml");
         httppost.setEntity(entity);

         // execute is a blocking call, it's best to call this code in a thread separate from the ui'sHttpResponseresponse= httpClient.execute(httppost);

         BasicResponseHandlerresponseHandler=newBasicResponseHandler();
            StringstrResponse=null;
            if (response != null) {
                try {
                    strResponse = responseHandler.handleResponse(response);
                } catch (HttpResponseException e) {
                    e.printStackTrace();  
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            Log.e("WCFTEST", "WCFTEST ********** Response" + strResponse);    


         }
         catch (Exception ex)
         {
         ex.printStackTrace();
         }
         Toast.makeText(EditTask.this, "Xml posted succesfully.",Toast.LENGTH_SHORT).show(); 

Post a Comment for "Problem With Android Http Post"