【问题标题】:Error in Android while running : String cannot be converted to JSONObjectAndroid 运行时出错:无法将字符串转换为 JSONObject
【发布时间】:2019-01-28 16:25:57
【问题描述】:

价值 {"orders":[{"orders_id":14,"order_price":"220.50","shipping_cost":"10.00","total_tax":"220.50","date_purchased":"2019-01-28 12:16:51","products_id":8},{"orders_id":14,"order_price":"220.50","shipping_cost":"10.00","total_tax":"220.50","date_purchased":" 2019-01-28 java.lang.String 类型的 12:16:51","products_id":1}]} 不能 转换为 JSONObject

我尝试过 Stackoverflow 上提供的一些解决方案,例如:Android Value ... of type java.lang.String cannot be converted to JSONArray,但没有效果。请帮帮我。


php:

public function ResellerOrders($reseller_id) 
{  

   $arr=array();
   $result=array();


    $stmt = $this->conn->prepare("SELECT o.orders_id,o.order_price,o.shipping_cost,o.total_tax,o.date_purchased,p.products_id FROM orders o, orders_products p WHERE o.orders_id = p.orders_id AND  o.reseller_id = ?");
   $stmt->bind_param("i", $reseller_id);


     if ($stmt->execute()) 
       {

      $stmt-> bind_result($token2,$token3,$token4,$token5,$token6,$token7);

          for ($i=0; $stmt-> fetch();$i++ ) 
            {

               $arr["orders"][$i]["orders_id"] = $token2;
            $arr["orders"][$i]["order_price"] = $token3;
            $arr["orders"][$i]["shipping_cost"] = $token4;
            $arr["orders"][$i]["total_tax"]= $token5;
            $arr["orders"][$i]["date_purchased"]= $token6;
            $arr["orders"][$i]["products_id"]= $token7;
            } 

              if(!$arr) exit('No rows');

               $stmt->close();

              return json_encode(($arr));

       }
    else
      {
        echo "no result";
      }            

        return json_encode($arr);
}

Android Java 代码

JsonArrayRequest strReq = new JsonArrayRequest(Request.Method.POST,
                URL_FOR_orders, new Response.Listener<JSONArray>() {

            @Override
            public void onResponse(JSONArray response) {
                Log.d(TAG, "Reseller Dashboard Response: " + response.toString());

                try {

                      for(int i=0;i<response.length();i++) {

                        JSONObject jObj=response.getJSONObject(i);

                        boolean error = jObj.getBoolean("error");

                        if (!error) {

                            Order_list orders = new Order_list(jObj);
                            Toast.makeText(getApplicationContext(), orders.product_id + " " + orders.billing_date, Toast.LENGTH_SHORT).show();


                            Intent intent = new Intent(
                                    Dashboard.this,
                                    categories.class);

                            intent.putExtra("reseller_id", reseller_code);                                      startActivity(intent);
                            finish();

                        } else {

                            String errorMsg = jObj.getString("error_msg");
                            Toast.makeText(getApplicationContext(),
                                    errorMsg, Toast.LENGTH_LONG).show();
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Error in getting data: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_LONG).show();

            }
        }) {
            @Override
            protected Map<String,String> getParams() {
                // Posting params to login url
                Map<String, String> params = new HashMap<String, String>();
                params.put("reseller_id", String.valueOf(code));
                return params;
            }
        };

我想将数据检索到 android 中,但它不允许我,那么问题出在哪里?是在 php 中传递值还是将数据检索到 android 中?

我想检索如下结果:

订单: 1.orders_id:14,order_price:220.50,shipping_cost:10.00,total_tax:220.50,date_purchased:2019-01-28 12:16:51,products_id:8 2.orders_id:14,order_price:220.50,shipping_cost:10.00,total_tax:220.50,date_purchased:2019-01-28 12:16:51,products_id:1

【问题讨论】:

  • 包含您的 Java 代码并格式化您的 JSON。顺便说一句,你想要的字符串无效。
  • 结果应该是这样的: 1."orders_id":14,"order_price":"220.50","shipping_cost":"10.00","total_tax":"220.50","date_purchased": "2019-01-28 12:16:51","products_id":8 2."orders_id":14,"order_price":"220.50","shipping_cost":"10.00","total_tax":"220.50", "date_purchased":"2019-01-28 12:16:51","products_id":1
  • 发布您的 android 日志响应。
  • 经销商仪表板响应:"{\"orders\":[{\"orders_id\":14,\"order_price\":\"220.50\",\"shipping_cost\":\" 10.00\",\"total_tax\":\"220.50\",\"购买日期\":\"2019-01-28 12:16:51\",\"products_id\":8},{\"orders_id \":14,\"order_price\":\"220.50\",\"shipping_cost\":\"10.00\",\"total_tax\":\"220.50\",\"date_purchased\":\"2019 -01-28 12:16:51\",\"products_id\":1}]}" W/System.err: org.json.JSONException: Value {"orders":[{"orders_id":14,. .........................,"products_id":1}]} 类型的 java.lang.String 无法转换为 JSONObject
  • 问题是通过从php端去掉json_encode解决的。谢谢大家!

标签: php android


【解决方案1】:
@Override
    public void onResponse(JSONArray response) {
        Log.d(TAG, "Reseller Dashboard Response: " + response.toString());

        try {
              for(int i=0;i<response.length();i++) {
                JSONObject jObj=response.getJSONObject(i);
                String ordersId = jObj.getString("orders_id");
                String orderPrice = jObj.getString("order_price");
                String shippingCost = jObj.getString("shipping_cost");
                String totalTax =jObj.getString("total_tax");
                String datePurchased = jObj.getString("date_purchased");
                String productsId = jObj.getString("products_id);            
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e(TAG, "Error in getting data: " + error.getMessage());
        Toast.makeText(getApplicationContext(),
                error.getMessage(), Toast.LENGTH_LONG).show();

    }
}) {
    @Override
    protected Map<String,String> getParams() {
        // Posting params to login url
        Map<String, String> params = new HashMap<String, String>();
        params.put("reseller_id", String.valueOf(code));
        return params;
    }
};

【讨论】:

  • 谢谢,但我仍然收到错误:获取数据时出错:org.json.JSONException: Value {"orders":[{"orders_id":14,"order_price":"220.50", "shipping_cost":"10.00","total_tax":"220.50","date_purchased":"2019-01-28 12:16:51","products_id":8},{"orders_id":14,"order_price" :"220.50","shipping_cost":"10.00","total_tax":"220.50","date_purchased":"2019-01-28 12:16:51","products_id":1}]} 类型为 java。 lang.String 无法转换为 JSONArray
猜你喜欢
  • 1970-01-01
  • 2017-01-27
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2012-05-12
相关资源
最近更新 更多