【问题标题】:how to send multidimensional array to server using retrofit android如何使用改造android将多维数组发送到服务器
【发布时间】:2020-01-05 13:55:33
【问题描述】:

我正在尝试使用 Retrofit 和 PHP 将JsonObject 发送到服务器。 JsonObject 生成成功发送到下面的JsonObject

{"neworder":"[{\"ItemName\":\"Sweet Pongal\",\"Cuisine\":\"Tiffen\",\"ItemId\":11,\"CuisineId\":1,\"itemType\":1,\"Quantity\":1,\"Restoid\":1,\"Mrp\":48,\"PackageCharges\":7,\"ItemCost\":48,\"distance\":1.3012003898620605,\"customerPhone\":\"9000539683\",\"customerName\":\"RAVI SHANKAR P\",\"Address\":\"45-2-40-11-5\\/1, Ramachandra Nagar, Akkayyapalem, Visakhapatnam, Andhra Pradesh 530016, India\",\"DeliveryOptions\":\"Right now\",\"amount\":188,\"paymentMode\":\"Cash\",\"latitude\":17.7359761,\"longitude\":83.2965298},{\"ItemName\":\"Idly\",\"Cuisine\":\"Tiffen\",\"ItemId\":1,\"CuisineId\":1,\"itemType\":1,\"Quantity\":2,\"Restoid\":1,\"Mrp\":34,\"PackageCharges\":7,\"ItemCost\":68,\"distance\":1.3012003898620605,\"customerPhone\":\"9000539683\",\"customerName\":\"RAVI SHANKAR P\",\"Address\":\"45-2-40-11-5\\/1, Ramachandra Nagar, Akkayyapalem, Visakhapatnam, Andhra Pradesh 530016, India\",\"DeliveryOptions\":\"Right now\",\"amount\":188,\"paymentMode\":\"Cash\",\"latitude\":17.7359761,\"longitude\":83.2965298}]"}

现在我想将此数据存储到我的服务器中,但我无法在 PHP 中捕获此 JSON,我在 PHP 代码下方尝试过

$json = file_get_contents('php://input');
$obj = json_decode($json,true);

$myarray =$obj['neworder'];

if(!empty($myarray)){

$respdata['success'] = "true";
$respdata['orderid'] = $myarray;

}

请看下面的代码我如何在我的 android 项目中发送改造请求

JSONArray OrderObj = new JSONArray();
        JSONObject OrderParms = null;

        for (CartUserModal cd : cartDetails) {
            int itemcost = (int) (cd.getQuantity() * cd.getMrp());

            double getdist = distance(cd.getRestlat(), cd.getRestlng(), setlatitude, setlongitue);

            try {
                OrderParms = new JSONObject();
                OrderParms.put("ItemName", cd.getItemname());
                OrderParms.put("Cuisine", cd.getCuisine());
                OrderParms.put("ItemId", cd.getItemid());
                OrderParms.put("CuisineId", cd.getCuisineid());
                OrderParms.put("itemType", cd.getItemtype());
                OrderParms.put("Quantity", cd.getQuantity());
                OrderParms.put("Restoid", cd.getRestoId());
                OrderParms.put("Mrp", cd.getMrp());
                OrderParms.put("PackageCharges", cd.getPackingcharges());
                OrderParms.put("ItemCost", itemcost);
                OrderParms.put("distance", getdist);
                OrderParms.put("customerPhone", custphone);
                OrderParms.put("customerName", custname);
                OrderParms.put("Address", delveryaddress);
                OrderParms.put("DeliveryOptions", deliveryoptions);
                OrderParms.put("amount", grandtotal);
                OrderParms.put("paymentMode", paymentoptions);
                OrderParms.put("latitude", setlatitude);
                OrderParms.put("longitude", setlongitue);
            }catch (JSONException e){
                e.printStackTrace();
            }
            OrderObj.put(OrderParms);
        }

        JsonObject newOrderObj = new JsonObject();
        newOrderObj.addProperty("neworder", String.valueOf(OrderObj));

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(OrderResto.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        OrderResto api = retrofit.create(OrderResto.class);

        Call<OrderResponse> call =api.SendNewPickup(newOrderObj);
        call.enqueue(new Callback<OrderResponse>() {
            @Override
            public void onResponse(Call<OrderResponse> call, Response<OrderResponse> response) {

                //Log.e("idoresopo", String.valueOf(response.body()));

                if(response.body().getResponse().equals("true")){

                    Toasty.success(getApplicationContext(), "Order Placed Successfully "+response.body().getOrderid(), Toast.LENGTH_SHORT).show();


                }else if(response.body().getResponse().equals("false")){

                    Toasty.success(getApplicationContext(), response.body().getError(), Toast.LENGTH_SHORT).show();

                    Intent maininternt = new Intent(CheckoutActivity.this, MainActivity.class);
                    startActivity(maininternt);
                    finish();
                }
            }

            @Override
            public void onFailure(Call<OrderResponse> call, Throwable t) {

            }
        });

还有我的改装界面

public interface OrderResto {

    String BASE_URL = "https://api.satyamresto.com/src/routes/";

    @Headers({"Content-Type: application/json"})
    @POST("orders.php")
    Call<OrderResponse> SendNewPickup(@Body JsonObject rawJsonString);
}

我尝试了上面的代码,但没有得到响应

【问题讨论】:

  • json_decode() 之后以简单的print_r($obj); 开头,这样您就可以看到实际传递的内容
  • 当我将数据从改造发送到 PHP 时,我如何知道 PHP 接收到了哪些数据?
  • 您每次都以完全相同的格式发送。
  • 是的,格式完全相同。我需要改变它吗?
  • 我收到了回复,我添加了 HttpLoggingInterceptor 来检查回复是否正常,谢谢您的帮助。 print_r($obj);真是个好主意。非常感谢

标签: php android retrofit2


【解决方案1】:

您的 JSON 实际上是 JSON 字符串中的 JSON 字符串。

所以在 PHP 中试试这个

$j = '{"neworder":"[{\"ItemName\":\"Sweet Pongal\",\"Cuisine\":\"Tiffen\",\"ItemId\":11,\"CuisineId\":1,\"itemType\":1,\"Quantity\":1,\"Restoid\":1,\"Mrp\":48,\"PackageCharges\":7,\"ItemCost\":48,\"distance\":1.3012003898620605,\"customerPhone\":\"9000539683\",\"customerName\":\"RAVI SHANKAR P\",\"Address\":\"45-2-40-11-5\\/1, Ramachandra Nagar, Akkayyapalem, Visakhapatnam, Andhra Pradesh 530016, India\",\"DeliveryOptions\":\"Right now\",\"amount\":188,\"paymentMode\":\"Cash\",\"latitude\":17.7359761,\"longitude\":83.2965298},{\"ItemName\":\"Idly\",\"Cuisine\":\"Tiffen\",\"ItemId\":1,\"CuisineId\":1,\"itemType\":1,\"Quantity\":2,\"Restoid\":1,\"Mrp\":34,\"PackageCharges\":7,\"ItemCost\":68,\"distance\":1.3012003898620605,\"customerPhone\":\"9000539683\",\"customerName\":\"RAVI SHANKAR P\",\"Address\":\"45-2-40-11-5\\/1, Ramachandra Nagar, Akkayyapalem, Visakhapatnam, Andhra Pradesh 530016, India\",\"DeliveryOptions\":\"Right now\",\"amount\":188,\"paymentMode\":\"Cash\",\"latitude\":17.7359761,\"longitude\":83.2965298}]"}';

$obj = json_decode($j,1);
print_r($obj);

$neworder = json_decode($obj['neworder'],1);
print_r($neworder);

结果:

Array
(
    [neworder] => [{"ItemName":"Sweet Pongal","Cuisine":"Tiffen","ItemId":11,"CuisineId":1,"itemType":1,"Quantity":1,"Restoid":1,"Mrp":48,"PackageCharges":7,"ItemCost":48,"distance":1.3012003898620605,"customerPhone":"9000539683","customerName":"RAVI SHANKAR P","Address":"45-2-40-11-5/1, Ramachandra Nagar, Akkayyapalem, Visakhapatnam, Andhra Pradesh 530016, India","DeliveryOptions":"Right now","amount":188,"paymentMode":"Cash","latitude":17.7359761,"longitude":83.2965298},{"ItemName":"Idly","Cuisine":"Tiffen","ItemId":1,"CuisineId":1,"itemType":1,"Quantity":2,"Restoid":1,"Mrp":34,"PackageCharges":7,"ItemCost":68,"distance":1.3012003898620605,"customerPhone":"9000539683","customerName":"RAVI SHANKAR P","Address":"45-2-40-11-5/1, Ramachandra Nagar, Akkayyapalem, Visakhapatnam, Andhra Pradesh 530016, India","DeliveryOptions":"Right now","amount":188,"paymentMode":"Cash","latitude":17.7359761,"longitude":83.2965298}]
)
Array
(
    [0] => Array
        (
            [ItemName] => Sweet Pongal
            [Cuisine] => Tiffen
            [ItemId] => 11
            [CuisineId] => 1
            [itemType] => 1
            [Quantity] => 1
            [Restoid] => 1
            [Mrp] => 48
            [PackageCharges] => 7
            [ItemCost] => 48
            [distance] => 1.3012003898621
            [customerPhone] => 9000539683
            [customerName] => RAVI SHANKAR P
            [Address] => 45-2-40-11-5/1, Ramachandra Nagar, Akkayyapalem, Visakhapatnam, Andhra Pradesh 530016, India
            [DeliveryOptions] => Right now
            [amount] => 188
            [paymentMode] => Cash
            [latitude] => 17.7359761
            [longitude] => 83.2965298
        )

    [1] => Array
        (
            [ItemName] => Idly
            [Cuisine] => Tiffen
            [ItemId] => 1
            [CuisineId] => 1
            [itemType] => 1
            [Quantity] => 2
            [Restoid] => 1
            [Mrp] => 34
            [PackageCharges] => 7
            [ItemCost] => 68
            [distance] => 1.3012003898621
            [customerPhone] => 9000539683
            [customerName] => RAVI SHANKAR P
            [Address] => 45-2-40-11-5/1, Ramachandra Nagar, Akkayyapalem, Visakhapatnam, Andhra Pradesh 530016, India
            [DeliveryOptions] => Right now
            [amount] => 188
            [paymentMode] => Cash
            [latitude] => 17.7359761
            [longitude] => 83.2965298
        )

)

【讨论】:

  • 我在服务器中执行此操作,可以打印原始 JSON,但是当我从改造中发送它时,我无法在 PHP 中捕获它。请查看我的 php 代码。我不知道我在 php 中收到了什么请求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2017-06-05
  • 1970-01-01
  • 2019-06-17
相关资源
最近更新 更多