在这里,我试图将json
数据发送到我的web服务器,并使用php
解析json并将数据插入mysql数据库。我得到一个错误,表示值stdClass为类型java。无法将lang.String转换为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
如果您所关注的是我的exmaple,那么请注意我使用了
Map<String,Object>
参数的插入方式如下所示:
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), ...
这样,强制转换将通过对象类进行。
还要注意,我的语法创建并将这些参数放在请求的外部和之前。
编辑:你看到大小是1的原因,是因为它实际上是1,这部分:
Map<String,Object> params = new HashMap<>();
params.put("Array",jsonarray);
将贴图大小设为1,因为您只在其中放置了一个对象-键值映射的数量是为贴图大小指定的值,这意味着-指向某个值的键的数量(该值本身可以是另一个贴图,它仍然只能算作一个),有关贴图集合的完整说明,请参阅此文档。
关于另一部分——我建议尝试将您想要的值添加到映射中,并将其发送到新的JSONObject中,我在这里回答了一些可能对您有所帮助的其他问题。然后——在php端——打印出你得到的(看看你是否得到了),一旦你在php端得到了参数——你就可以开始着手解析它了。
希望这有助于任何方式:)
大小是1,这是正确的,因为你把你的地图这样:
params.put("Array",jsonarray);
因此,json将是1个对象{"Array":[...]}
,在解析数组之前,您必须首先访问该对象。
在您的代码中,我认为您正在尝试将字符串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 + "\"");
}
我将客户数据对象存储为共享首选项(Android)中的JSON字符串,并尝试检索转换回客户对象的字符串并用于验证。从对象到JSON字符串的转换非常好,并且存储在首选项中(作为键值(字符串)对)。 当我尝试使用-我总是得到相同的错误值...类型java.lang.字符串不能转换为JSONObject。 我希望一双不同的眼睛能捕捉到我不能捕捉到的东西。带有数据的错误消息(屏蔽): Value 类型为j
我开发了一个Android应用程序,请求从响应JSON格式的服务器的位置坐标(目前它只发送两个地方): 这是来自服务器的php代码: 当应用程序获取坐标时,它会尝试以这种方式解析坐标: getplaces(): JSONParser: 下面是带有错误的JSON: 当应用程序试图解析JSON响应时,它会崩溃,并发送一个JSON异常:类型java.lang.字符串的值不能转换为JSONObject如何
问题内容: 我有一个JSON文件,其中包含2个JSON数组:一个用于路线的数组,一个用于景点的数组。 一条路线应由用户导航到的多个景点组成。不幸的是我遇到了错误: JSONException:无法将类型为java.lang.String的值转换为JSONObject 这是我的变量和解析JSON文件的代码: Log.i(“ JSON Parser”,json); 告诉我在生成的字符串的开头有一个奇怪
任务控制器 创造jsp 在控制器中,我用相同的错误(以及不同的格式,如“yyyy/MM/dd”)编写了以下内容 我还尝试在类中添加注释(以及使用不同的格式),但出现了相同的错误
我正在开发一个android应用程序,我正在尝试使用Volley库。我无法解决的问题是关于JSON的。我检查了我的php文件、结果和Java代码,但仍然得到相同的错误。 有趣的是,截击日志不显示错误消息,但日志显示错误消息。 和 这是我的PHP代码: 结果如下: 和我的Java代码: 我也听说了GSON。这是解决办法吗?有人能帮帮我吗?提前感谢!!
我正在抛出一个JSON异常,我不知道为什么会抛出它。我已经看了几乎所有和我一样的问题,但我认为我的不同。因此,我从一个网页获得一个JSONArray,它发送的JSON是有效的(我用验证器检查了它)。在JSONArray上执行getJSONObject时引发异常。 这正是它所说的(个人信息被标出): 这是我的Java代码: 错误发生在我去的行: 任何帮助都非常感谢。