类型为java.lang.String的JsonException值stdClass无法转换为JSONObject?

类型为java.lang.String的JsonException值stdClass无法转换为JSONObject?,java,android,json,Java,Android,Json,在这里,我试图将json数据发送到我的web服务器,并使用php解析json并将数据插入mysql数据库。我收到一个错误,表示java.lang.String类型的值stdClass无法转换为JSONObject。 如何解决此错误 private void insertToDb() throws JSONException { billType = (invEstSwitch.isChecked() ? textViewEstimate : textViewInvoice)

在这里,我试图将
json
数据发送到我的web服务器,并使用
php
解析json并将数据插入mysql数据库。我收到一个错误,表示java.lang.String类型的值stdClass无法转换为JSONObject。

如何解决此错误

   private void insertToDb() throws JSONException {
    billType = (invEstSwitch.isChecked() ? textViewEstimate : textViewInvoice)
            .getText().toString();
    String invNumber = textViewInvNo.getText().toString();
    String bcode = barCode.getText().toString();
    String description = itemDesc.getText().toString();
    String wt = weightLine.getText().toString();
    String rateAmt = rateAmount.getText().toString();
    String making = makingAmount.getText().toString();
    String netr = netRate.getText().toString();
    String iTotal=itemtotal.getText().toString();
    String vatAmt =textViewVat.getText().toString();
    String sumAmt =textViewSum.getText().toString();
    String crtDate =textViewCurrentDate.getText().toString();
    try {
        jsonObject.put("custInfo", custSelected.toString());
        jsonObject.put("invoiceNo", invNumber);
        jsonObject.put("barcode", bcode);
        jsonObject.put("desc", description);
        jsonObject.put("weight",wt );
        jsonObject.put("rate", rateAmt);
        jsonObject.put("makingAmt", making);
        jsonObject.put("net_rate",netr);
        jsonObject.put("itemTotal",iTotal );
        jsonObject.put("vat", vatAmt);
        jsonObject.put("sum_total", sumAmt);
        jsonObject.put("bill_type", billType);
        jsonObject.put("date", crtDate);


    } catch (JSONException e) {
        e.printStackTrace();
    }
    try {
        itemSelectedJson.put(index, jsonObject);
        index++;
    } catch (JSONException e) {
        e.printStackTrace();
    }
   String jsonarray = itemSelectedJson.toString().trim();
    JSONObject jb= new JSONObject();
    jb.put("selected",itemSelectedJson);

 Map<String,Object> params = new HashMap<>();
    params.put("Array",jsonarray);


    final JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.POST, INVEST_URL, new JSONObject(params), new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.d("RESPONSE", response.toString());

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("JSONERROR",error.toString());
        }
    });



    final RequestQueue queue = Volley.newRequestQueue(this);
    queue.add(objectRequest);

}

这是我调试它时看到的。问题是,当我说JSONObject(params)时,它说params:size=1 objectRequest:“[]

在您的代码中,我认为您正在尝试将字符串stdClass转换为json对象,所以如果您正在执行此过程,请遵循下面的代码,我将给出一个将字符串转换为json对象的示例

String json = {"phonetype":"N95","cat":"WP"};

try {

    JSONObject obj = new JSONObject(json);

    Log.d("My App", obj.toString());

} catch (Throwable t) {
    Log.e("My App", "Could not parse malformed JSON: \"" + json + "\"");
}

如果您所关注的是我的,那么请注意我使用了

Map<String,Object> 
这样,强制转换将通过对象类进行

还要注意,我的语法创建并将这些参数放在请求的外部和之前

编辑: 您之所以看到大小为1,是因为它实际上是1,这部分:

Map<String,Object> params = new HashMap<>();
params.put("Array",jsonarray);
Map params=newhashmap();
参数put(“数组”,jsonarray);
使贴图大小为1,因为您只在其中放置了一个对象- key-value映射的数量是为映射大小给定的值,意思是-指向某个值的键的数量(该值本身可以是另一个映射,它仍然只算一个),有关映射集合的完整说明,请参阅

关于另一部分——我建议尝试将您想要的值添加到映射中,并将其发送到新的JSONObject中,我回答了一些可能对您有所帮助的其他问题。 然后——在php端——打印出你得到的(看看你是否得到了),一旦你在php端得到了参数——你就可以开始着手解析它了


希望这对您有所帮助:)

大小为1这是正确的,因为您在地图中这样放置:

params.put("Array",jsonarray);

因此json应该是1object
{“Array”:[…]}
您必须先访问此对象,然后才能解析数组。

请显示完整的堆栈跟踪。@Patrick我刚刚添加了堆栈跟踪,请检查。谢谢:)@Patrick谢谢:)您能帮我回答吗?我在任何地方都找不到
值stdClass
。您能告诉我异常真正发生在哪里吗。谢谢检查你的json字符串中是否有一些看不见的字符。看看。我的json数组类似[{“custInfo”:“Ujwal 9975022560”,“rate”:“24000”,“weight”:“21.00000”,“desc”:“GENTS ANGTHI 22k NO STONE”,“makingAmt”:“200”,“sum_total”:“RS.52094.46”,“vat”:“RS.1021.46”,“itemtall”:“51073”,“barcode”:“BQSP78BB”,“net_rate”:“24200”,“date”:2015-12-01,“发票编号”:“1”,“票据类型”:“发票”}]打开此链接并通过json数组..当我通过此json数组时,它的无效json数组错误显示。由于上述代码工作正常,JsonObjectRequest类中存在问题。因此,请提供此类的代码。请检查更新的问题。我的问题是在调试新JSONObject(参数)时出现的表示params:size=1和一个空的objectRequest[]。如果检查图像,您将看到jsonarray正在放入params(Map)中,那么为什么新的JsonObject(params)会导致objectRequest:[]例如,为什么它是空的。我想我得到了异常,因为它是空的。你能给出一个代码示例,说明如何使用volley将多个值插入mysql数据库吗。这对像我这样的初学者会很有帮助的谢谢:)
// Creating a JSON Object request
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(params), ...
Map<String,Object> params = new HashMap<>();
params.put("Array",jsonarray);
params.put("Array",jsonarray);