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"