这里我试图将json
数据发送到我的网络服务器并使用php
我想解析json并将数据插入到mysql数据库中。我收到一条错误,指出{stmClass 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<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);
}
我是编程新手,所以感谢任何帮助。谢谢你:)。
这是堆栈跟踪:
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:&#34; []
答案 0 :(得分:2)
我认为您正在尝试将字符串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 + "\"");
}
答案 1 :(得分:1)
如果你关注的是exmaple,那么请注意我使用了
Map<String,Object>
params插入如下:
Map<String, Object> 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的原因是因为它实际上是1,这部分:
Map<String,Object> params = new HashMap<>();
params.put("Array",jsonarray);
使地图大小为1,因为你只放入一个对象 - 键值映射的数量是为地图大小指定的值,意思是 - 指向值的键的数量(值本身可以是另一个Map,它仍然只计为一),请参阅This Documentation以获取有关地图集的完整说明。
关于另一部分 - 我建议尝试将您想要的值添加到Map并在新的JSONObject中发送 ,我回答了其他可能对您有帮助的事情Here 。 然后 - 在php端 - 打印出你得到的东西(看到你确实得到它),一旦你在php端得到了params - 你可以开始包围解析它。
希望这有助于以任何方式:)
答案 2 :(得分:1)
尺寸 1 这是正确的,因为您以这种方式放入地图:
params.put("Array",jsonarray);
所以json将是 1 对象{"Array":[...]}
,你必须首先访问这个对象才能解析数组。