Kienan Knight-Boehm Kienan Knight-Boehm - 1 year ago 58
Android Question

Sending HTTP Post Request with Android

I've been trying to learn from tons of examples on

and other sites, but I can't figure out why the example I've hacked together isn't working. I'm building a small proof-of-concept app that recognizes speech and sends it (the text) as a POST request to a
server. The speech recognition I have confirmed to work and the server is receiving connections from a regular browser visit, so I'm led to believe that the issue is in the app itself. Am I missing something small and stupid? No errors are being thrown but the server is never recognizing a connection. Thanks in advance for any advice or help.

(main activity and the necessary AsyncTask):

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1001) {
if (resultCode == RESULT_OK) {
ArrayList<String> textMatchList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
if (!textMatchList.isEmpty()) {
String topMatch = textMatchList.get(0);
PostTask pt = new PostTask();

private class PostTask extends AsyncTask<String, String, String> {
protected String doInBackground(String... data) {
try {
URL url = new URL("http://<ip address>:3000");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
ContentValues values = new ContentValues();
values.put("data", data[0]);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
StringBuilder sb = new StringBuilder();
sb.append(URLEncoder.encode("data", "UTF-8"));
sb.append(URLEncoder.encode(data[0], "UTF-8"));
return "Text sent: " + data[0];
} catch (IOException e) {
return "LOL NOPE";

Server JS:

var http = require('http');
const PORT=3000;

function handleRequest(request, response){
response.end('It Works!! Path Hit: ' + request.url);
console.log("Request got.");

var server = http.createServer(handleRequest);
server.listen(PORT, '');
console.log("Listening on 3000...");

Answer Source

You can use Http Client from Apache Commons. For example:

private class PostTask extends AsyncTask<String, String, String> {
  protected String doInBackground(String... data) {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://<ip address>:3000");

    try {
      //add data
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
      nameValuePairs.add(new BasicNameValuePair("data", data[0]));
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
      //execute http post
      HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {

    } catch (IOException e) {



You can use Volley Android Networking Library to post your data. Official document is here.

I personally use Android Asynchronous Http Client for few REST Client projects.

Other tool that good to explore is Retrofit.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download