I have this server code running on Node JS.
function onTransactionStart(req, res, next){
var transaction = {};
var quantity = {};
console.log(req);
var obj=req.query;
generateToken(8);
console.log(token);
transaction._id = token;
transaction.u_id = obj.u_id;
transaction.emp_id = obj.emp_id;
transaction.lat = obj.lat;
transaction.lon = obj.lon;
transaction.quantity = quantity;
transaction.quantity.paper = obj.paper;
transaction.quantity.plastic = obj.plastic;
transaction.mode = obj.mode;
transaction.date = new Date();
transaction.status = obj.status;
transactions.save(transaction , function(err , success){
console.log('Response success '+success);
console.log('Response error '+err);
if(success){
res.send(201 , transaction);
return next();
}else{
return next(err);
}
});
}
This has a POST route as:
var TRANSACTION_PATH = '/transaction'
server.post({path : TRANSACTION_PATH , version: '0.0.1'} , onTransactionStart);
In my Android app I'm making a POST request using async HttpClient:
public class HttpLibrary extends AsyncTask<String, String, String> {
private HashMap<String, String> mData = null;// post data
/**
* constructor
*/
public HttpLibrary(HashMap<String, String> data) {
mData = data;
}
/**
* background
*/
@Override
protected String doInBackground(String... params) {
byte[] result = null;
String str = "";
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(params[0]);// in this case, params[0] is URL
try {
// set up post data
ArrayList<NameValuePair> nameValuePair = new ArrayList<>();
Iterator<String> it = mData.keySet().iterator();
while (it.hasNext()) {
String key = it.next();
nameValuePair.add(new BasicNameValuePair(key, mData.get(key)));
}
post.setHeader("Content-Type", "application/json");
post.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8"));
Log.i("Param",post.getParams().toString());
Log.i("Request", post.getParams().toString());
HttpResponse response = client.execute(post);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
result = EntityUtils.toByteArray(response.getEntity());
str = new String(result, "UTF-8");
}
}
catch (Exception e) {
e.printStackTrace();
}
return str;
}
/**
* on getting result
*/
@Override
protected void onPostExecute(String result) {
// something...
Log.i("error",result);
}
}
I'm using the code as:
public void onClick(View v) {
try {
HttpURLConnection httpcon = (HttpURLConnection) ((new URL("http://ecosquare.herokuapp.com/transaction?" +
"u_id=8767856743&emp_id=9804770561&lat=22.56&lon=88.34&paper=20&plastic=10&mode=cash&status=init").openConnection()));
httpcon.setDoOutput(true);
httpcon.setRequestProperty("Content-Type", "application/json");
httpcon.setRequestProperty("Accept", "application/json");
httpcon.setRequestMethod("POST");
httpcon.connect();
byte[] outputBytes = "{'value': 7.5}".getBytes("UTF-8");
OutputStream os = httpcon.getOutputStream();
os.write(outputBytes);
os.close();
}catch (Exception e){
Toast.makeText(getBaseContext(), "Error "+e.toString(), Toast.LENGTH_LONG).show();
}
HashMap<String, String> data = new HashMap<String, String>();
data.put("u_id", "8981169454");
data.put("emp_id", "9804770561");
data.put("lat",Double.toString(lat));
data.put("lon",Double.toString(lon));
data.put("paper","10");
data.put("plastic","10");
data.put("mode","cash");
data.put("status", "init");
HttpLibrary post = new HttpLibrary(data);
post.execute("http://ecosquare.herokuapp.com/transaction?u_id=8981169454&emp_id=9804770561" +
"&lat="+data.get("lat")+"&lon="+data.get("lon")+"&paper=20&plastic=10&mode=cash&status=init");
Toast.makeText(getBaseContext(), "Data : "+data, Toast.LENGTH_LONG).show();
}
However the POST is not working. Please help. I'm new at Android. Thanks.