[英]Android POST request to Restify server
我有此服務器代碼在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);
}
});
}
它的POST路由為:
var TRANSACTION_PATH = '/transaction'
server.post({path : TRANSACTION_PATH , version: '0.0.1'} , onTransactionStart);
在我的Android應用中,我使用異步HttpClient發出POST請求:
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);
}
}
我將代碼用作:
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();
}
但是POST無法正常工作。 請幫忙。 我是Android新手。 謝謝。
如果您現在使用的是Android,建議您使用一些庫進行改造http://square.github.io/retrofit/
您只需要聲明一個簡單類,其中包含要發送到服務器的所有數據(根據json對象)和一個簡單接口。 您將獲得更快,更高效的通信。
您甚至可以使用Volley https://developer.android.com/training/volley/index.html
我使用了Ion Framework,它的工作原理很吸引人。 簡單,快速。
Ion.with(getApplicationContext())
.load("http://example.com/transaction")
.setJsonObjectBody(json)
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
if(e!=null){
Toast.makeText(getBaseContext(), "Data : "+e.getStackTrace(), Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getBaseContext(), "Data added successfully! We will contact you soon.", Toast.LENGTH_LONG).show();
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.