JsonException类型java.lang.String的值stdClass无法转换为JSONObject?
在这里,我试图将json
数据发送到我的web服务器并使用php
我想解析json并将数据插入到mysql数据库中。 我收到一个错误,说type java.lang.String cannot be converted to JSONObject.
值stdClass type java.lang.String cannot be converted to 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 params = new HashMap(); params.put("Array",jsonarray); final JsonObjectRequest objectRequest = new JsonObjectRequest(Request.Method.POST, INVEST_URL, new JSONObject(params), new Response.Listener() { @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); }
我是编程新手所以感谢任何帮助。谢谢你:)
这是堆栈跟踪:
12-01 17:17:50.840 16785-16785/org.bordetuts.com.goldmine D/dalvikvm: GC_FOR_ALLOC freed 345K, 9% free 8597K/9396K, paused 14ms, total 14ms 12-01 17:17:50.841 16785-16785/org.bordetuts.com.goldmine D/SELECTED_ITEMS: [{"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","itemTotal":"51073","barcode":"BQSP78BB","net_rate":"24200","date":"2015-12-01","invoiceNo":"1","bill_type":"Invoice"}] 12-01 17:17:50.897 16785-16785/org.bordetuts.com.goldmine W/IInputConnectionWrapper: finishComposingText on inactive InputConnection 12-01 17:17:50.897 16785-16785/org.bordetuts.com.goldmine W/IInputConnectionWrapper: finishComposingText on inactive InputConnection 12-01 17:17:51.259 16785-16785/org.bordetuts.com.goldmine D/JSONERROR: com.android.volley.ParseError: org.json.JSONException: Value stdClass of type java.lang.String cannot be converted to JSONObject 12-01 17:21:47.657 16785-16792/org.bordetuts.com.goldmine D/dalvikvm: GC_FOR_ALLOC freed 536K, 8% free 8689K/9396K, paused 171ms, total 190ms
这是我在调试它时看到的。问题是当我说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 + "\""); }
size是1 ,这是正确的,因为你以这种方式放入你的地图:
params.put("Array",jsonarray);
所以json将是1个对象{"Array":[...]}
,你必须首先访问这个对象,然后才能解析数组。
如果您关注的是我的例子 ,那么请注意我使用的是
Map
params插入如下:
Map params = new ArrayMap<>(); // Adding parameters to request params.put("email", email); // here email is already a string, params.put("password", password.toString()); // here password needs the conversion
然后我使用新的匿名JSONObject将其直接传递给请求:
// Creating a JSON Object request JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(params), ...
这样,转换将通过Object类。
另请注意,我的语法会在请求之外和之前创建并放置这些参数。
编辑:你看到大小是一的原因是因为它实际上是1,这部分:
Map params = new HashMap<>(); params.put("Array",jsonarray);
使地图大小为1,因为您只放入一个对象 – 键值映射的数量是为地图大小指定的值,意思是 – 指向值的键的数量(值本身可以是另一个地图,它仍然只计为一个),请参阅本文档以获取有关Map Collection的完整说明。
关于另一部分 – 我建议尝试将您想要的值添加到Map并将其发送到新的JSONObject中,我回答了其他可能对此有帮助的内容。 然后 – 在PHP端 – 打印出你得到的东西(看到你确实得到它),一旦你在php端得到了参数 – 你可以开始包围解析它。
希望这有助于任何方式:)
- 如何访问我的Android应用程序中的资产文件夹?
- 如何将Mongo DB与Android应用程序连接起来
- String to String Array Android项目
- 在推送通知错误“notificationBuilder.setContentText(currentText).setNumber(++ numMessages);”中找不到符号
- android EditText在输入文本时滞后
- Android:如何在十进制值之后得到两位数? 不想截断该值
- 尽管设置了必要的属性,列表项仍不会保持选中
- cordova插件添加外部.aar文件(不是.jar)
- Espresso onData在视图上执行“加载适配器数据”时出错