Android JSONObject Post Volley using StringRequest



我现在有点困惑,因为我问了一个与PHP端的JSON解码相关的问题。我专注于使用stringrequest从Android Volley解码JSONobject POST。我能够创建一个关于将数据插入MySql的良好代码,但我忘记了我在客户端的配置仍然很糟糕。现在我得到"E/Volley: [215] BasicNetwork.performRequest: 意外响应代码 500"我将在 Android 和 PHP 端发布我的代码。请相应地指导我。这里真的很累。希望有人帮助我。

客户端:

public void testOrder (ArrayList<String> order_id,
                                      ArrayList<String> uname,
                                      ArrayList<String> prod_name,
                                      ArrayList<String> prod_id,
                                      ArrayList<String> quantity,
                                      ArrayList<String> branches,
                                      ArrayList<String> totalPrice,
                                      int itemIteration){
        JSONObject obj = null;
        JSONArray jsonArray = new JSONArray();
        final JSONObject finalobject = new JSONObject();
        for (int i = 0; i < itemIteration; i++) {
            obj = new JSONObject();
            Log.d("OBJECT_COUNTER", String.valueOf(i));
            try {
                obj.put("itemCount",   itemIteration-1);
                obj.put("order_id",    order_id.get(i));
                Log.d("ORDER_ID",      order_id.get(i));
                obj.put("uname",       uname.get(i));
                Log.d("USERNAME",      uname.get(i));
                obj.put("prod_name",   prod_name.get(i));
                Log.d("PROD_NAME",     prod_name.get(i));
                obj.put("quantity",    quantity.get(i));
                Log.d("PROD_QUANT",    quantity.get(i));
                obj.put("branch",      branches.get(i));
                Log.d("PROD_BRANCHES", branches.get(i));
                obj.put("totalPrice",  totalPrice.get(i));
                Log.d("TOTAL_PRICE",   totalPrice.get(i));
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            jsonArray.put(obj);
        }

            try {
                finalobject.put("ORDERLIST", jsonArray);
                test = jsonArray.toString();
//                Toast.makeText(this,test,Toast.LENGTH_SHORT).show();
            } catch (JSONException e) {
                e.printStackTrace();
            }

        StringRequest strRequest = new StringRequest(Request.Method.POST, Config.TRY_JSON_POST,
                new Response.Listener<String>()
                {
                    @Override
                    public void onResponse(String response)
                    {
                        Toast.makeText(PlaceOrder.this, response, Toast.LENGTH_SHORT).show();
                        //Log.d("Response",response);
//
                    }
                },
                new Response.ErrorListener()
                {
                    @Override
                    public void onErrorResponse(VolleyError error)
                    {
                        Toast.makeText(PlaceOrder.this, error.toString(), Toast.LENGTH_SHORT).show();
                    }
                })
        {
            @Override
            protected Map<String, String> getParams()
            {
                Map<String, String> params = new HashMap<>();
                params.put("ORDERLIST", finalobject.toString());
                return params;
            }
        };
        RetryPolicy policy = new DefaultRetryPolicy(60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); strRequest.setRetryPolicy(policy);
        AppController.getmInstance().addToRequesQueue(strRequest);
    }
}

服务器端:

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
$content   = file_get_contents("php://input");
$response  = json_decode($content, true);
$orderlist = json_decode($response['ORDERLIST'], true);
//$count     = count($response);
for($x=0;$x<=count($response);$x++){
  foreach($orderlist AS $row){
     $id=$row[$x]['order_id']; 
     $uname=$row[$x]['uname'];
     $query_parts[$x] = "("."'".$row[$x]['order_id']."'".","."'".$row[$x]['uname']."'".","."'".$row[$x]['prod_name']."'".","."'".$row[$x]['quantity']."'".","."'".$row[$x]['totalPrice']."'".")";
  }
}
$sql_1 = "INSERT INTO `order` (`order_id`, `uname`) VALUES ('$id', '$uname')";
$sql_2 = "INSERT INTO orders (order_id, uname, prod_name, quantity, total_price) VALUES ".implode(',', $query_parts);
 if ($con->query($sql_1) === TRUE) {
       if ($con->query($sql_2) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error2: " . $sql_2 . "<br>" . $con->error;
    }
 } else {
    echo "Error1: " . $sql_1 . "<br>" . $con->error;
 }
 } else {
        echo "FAILED JSON POST";
 }

首先删除了一些语句以防止凌空抽射。错误

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
$content   = file_get_contents("php://input");
//$response  = json_decode($content, true);
//$orderlist = json_decode($response['tag'], true);
//$count     = count($response);
$response = json_decode($content, true);
$orderlist= $response['ORDERLIST'];
echo $content;
 } else {
    echo "NO POST";
 }

我正在收到这些代码,所以我的来宾服务器端收到了我的JSONObject

ORDERLIST=%7B%22ORDERLIST%22%3A%5B%7B%22itemCount%22%3A1%2C%22order_id%22%3A%226794%22%2C%22uname%22%3A%22jordan%22%2C%22prod_name%22%3A%22ABC%22%2C%22quantity%22%3A%221%22%2C%22branch%22%3A%22Dapitan%22%2C%22totalPrice%22%3A%2223500%22%7D%2C%7B%22itemCount%22%3A1%2C%22order_id%22%3A%226794%22%2C%22uname%22%3A%22jordan%22%2C%22prod_name%22%3A%22AMD+Kaveri+A4-7300+APU+HD8470D+2-Core+2GB+500GB+CPU+Package%22%2C%22quantity%22%3A%221%22%2C%22branch%22%3A%22Dapitan%22%2C%22totalPrice%22%3A%2223500%22%7D%5D%7D&

模拟数据库操作,它正在工作

$content = '{"ORDERLIST":"{"ORDER_LIST":[{"order_id":"1756","uname":"jordan","prod_name":"ABC","quantity":"1","branch":"Dapitan","totalPrice":"23500"},{"order_id":"1756","uname":"jordan","prod_name":"AMD Kaveri A4-7300 APU HD8470D 2-Core 2GB 500GB CPU Package","quantity":"1","branch":"Dapitan","totalPrice":"23500"}]}"}';
$con = mysqli_connect("localhost","","","");
$response  = json_decode($content, true);
$orderlist = json_decode($response['ORDERLIST'], true);
//$count     = count($response);
for($x=0;$x<=count($response);$x++){
  foreach($orderlist AS $row){
     $id=$row[$x]['order_id']; 
     $uname=$row[$x]['uname'];
     $query_parts[$x] = "("."'".$row[$x]['order_id']."'".","."'".$row[$x]['uname']."'".","."'".$row[$x]['prod_name']."'".","."'".$row[$x]['quantity']."'".","."'".$row[$x]['totalPrice']."'".")";
  }
}

$sql_1 = "INSERT INTO `order` (`order_id`, `uname`) VALUES ('$id', '$uname')";
$sql_2 = "INSERT INTO orders (order_id, uname, prod_name, quantity, total_price) VALUES ".implode(',', $query_parts);
 if ($con->query($sql_1) === TRUE) {
       if ($con->query($sql_2) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error2: " . $sql_2 . "<br>" . $con->error;
    }
 } else {
    echo "Error1: " . $sql_1 . "<br>" . $con->error;
 }

您正在针对key "tag"发布数据,但在server side您从密钥"ORDERLIST"获取的数据$orderlist = json_decode($response['ORDERLIST'], true);。要么在getParams中删除参数并发送完整的 json,要么在服务器端更改为 $orderlist = json_decode($response['tag'], true);

希望这有帮助。

最新更新