我的代码从服务器接收一个JSON对象编码字符串,可以是: [{“logstatus”:“0”}]或[{“logstatus”:“1”}]
然后它转换此JSON(作为ImputStream接收),然后我将其转换为字符串,稍后我想将其转换为JSON对象。但这里出现了错误。 这是我的代码:
public JSONArray getserverdata(ArrayList<NameValuePair> parameters, String urlwebserver ) {
httppostconnect(parameters,urlwebserver);
if (is!=null) { //si obtuvo una respuesta
getpostresponse();
return getjsonarray();
} else {
return null;
}
}
private void httppostconnect(ArrayList<NameValuePair> parametros, String urlwebserver) {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(urlwebserver);
httppost.setEntity(new UrlEncodedFormEntity(parametros));
//ejecuto peticion enviando datos por POST
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch(Exception e) {
Log.e("log_tag", "Error in http connection "+e.toString());
}
}
public void getpostresponse() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
Log.e("getpostresponse"," result="+sb.toString());
} catch(Exception e) {
Log.e("log_tag", "Error converting result "+e.toString());
}
}
public JSONArray getjsonarray() {
//parse json data
try {
JSONArray jArray = new JSONArray(result);
return jArray;
} catch(JSONException e) {
Log.e("log_tag", "Error parsing data "+e.toString());
return null;
}
}
错误发生在函数getjsonarray()中。
解析数据时出错org.json.JSONException:Value ??类型java.lang.String无法转换为JSONArray。
我已经验证服务器返回格式正确的JSON(可以是[{“logstatus”:“0”}]或[{“logstatus”:“1”}]。
我也试过使用JSONToken,但它也不起作用。
希望你能帮助我!
答案 0 :(得分:0)
请注明您收到的数据。我的猜测是你没有得到你的想法。该字符串看起来很好,应该解析得很好。当您注销该异常时,还要注销有问题的String,您应该会看到问题。
答案 1 :(得分:0)
如果要从String创建JsonArray,首先需要验证String是否具有执行该操作的格式。
您可以打印结果字符串并对其进行测试here.