如何使用改造将多维数组发送到服务器 android
how to send multidimensional array to server using retrofit android
我正在尝试使用 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 项目中发送 Retrofit 请求的
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 实际上是 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
)
)
我正在尝试使用 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 项目中发送 Retrofit 请求的
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 实际上是 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
)
)