Ион POST в качестве параметров URL, а не JSON тело Android
Я хочу POST к моему API сервера, используя параметры вместо тела JSON.
Я могу реализовать это:
JsonObject json = new JsonObject();
json.addProperty("u_id", "XXX");
json.addProperty("emp_id", "XXX");
json.addProperty("lat", Double.toString(lat));
json.addProperty("lon", Double.toString(lon));
json.addProperty("paper", "5");
json.addProperty("plastic", "10");
json.addProperty("mode", "cash");
json.addProperty("status", "init");
Ion.with(getApplicationContext())
.load(getString(R.string.url)+"/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 {
runOnUiThread(new Runnable() {
@Override
public void run() {
progress.dismiss();
}
});
Toast.makeText(getBaseContext(), "Pickup added successfully! We will contact you soon.", Toast.LENGTH_LONG).show();
}
}
});
Но я хочу достичь того же самого http://someserver.com/transaction/<u_id>/<emp_id>/22.56/88.45/5/10/cash/init
где мой сервер готов обрабатывать параметры.
Во всяком случае, Koushik Dutta (@koush) библиотека замечательная и асинхронная. Любил это.
1 ответ
Это возможно, но только если вы вручную создадите URL запроса.
Данные запроса POST-запроса должны идти в теле запроса, выполненном с setJsonObjectBody()
, URL - это просто конечная точка, в которую должен быть отправлен запрос POST.
аналогия
Если http://someserver.com/transaction
это название города, в котором вы живете, /<u_id>/<emp_id>/22.56/88.45/5/10/cash/init
это адрес вашего дома, и json
это посылка, которая доставляется на ваш дом.
Вы можете указать адрес, на который должен быть отправлен ваш пакет, но вы не помещаете информацию о содержимом пакета на адресной этикетке. Это два отдельных типа данных, и к ним следует относиться по-разному.
Поэтому вы должны сделать что-то вроде этого
JsonObject json = new JsonObject();
json.addProperty("lat", Double.toString(lat));
json.addProperty("lon", Double.toString(lon));
json.addProperty("paper", "5");
json.addProperty("plastic", "10");
json.addProperty("mode", "cash");
json.addProperty("status", "init");
String u_id = "XXX";
String emp_id = "XXX";
String url = getString(R.string.url) + "/transaction/" + u_id + "/" +
emp_id + "/22.56/88.45/5/10/cash/init";
Ion.with(getApplicationContext())
.load(url)
.setJsonObjectBody(json)
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
}
});
Обратите внимание, что косые черты в URL, возможно, должны быть экранированы. Не знаю от макушки головы.