【发布时间】: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);真是个好主意。非常感谢