Ion POST作为url参数而不是JSON body Android

时间:2015-09-26 14:29:44

标签: android json ion ion-koush

我想使用参数而不是JSON body POST到我的服务器API。

我可以实现这个:

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();
                                }
                            }
                        });

但是我希望通过POST到http://someserver.com/transaction/<u_id>/<emp_id>/22.56/88.45/5/10/cash/init来实现相同目的,我的服务器已准备好处理参数。

无论如何,Koushik Dutta(@koush)这个图书馆非常精彩且异步。喜欢它。

1 个答案:

答案 0 :(得分:1)

这是可能的,但前提是您手动构建请求网址。

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) {

            }
        });

请注意,可能需要转义网址中的斜杠。从头顶不知道。