Android 从接收到的json创建JSONArray时出现问题
昨天它工作正常,今天我收到一条消息,比如:java.lang.String类型的值不能转换为JSONArray 这是我收到的json: 当我尝试从以下位置执行JSONArray时,代码停止:Android 从接收到的json创建JSONArray时出现问题,android,json,arrays,jsonobject,Android,Json,Arrays,Jsonobject,昨天它工作正常,今天我收到一条消息,比如:java.lang.String类型的值不能转换为JSONArray 这是我收到的json: 当我尝试从以下位置执行JSONArray时,代码停止: private class HttpAsyncTaskFamilies extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { retu
private class HttpAsyncTaskFamilies extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
return GET(urls[0]);
}
// onPostExecute displays the results of the AsyncTask
@Override
protected void onPostExecute(String result) {
JSONArray jArray;
String families = "";
Log.d(TAG, "result in onPostExectute Families -> " + result);
try {
DatabaseHelper helper = new DatabaseHelper(
getApplicationContext());
try {
helper.dropAndCreate(helper.getConnectionSource(),
Familia.class);
// Do the inserts in table Familia
jArray = new JSONArray(result);
Log.d(TAG, "jsonArray -> " + jArray);
for (int i = 0; i < jArray.length(); i++) {
JSONObject json = jArray.getJSONObject(i);
Log.d(TAG, "jsonObject -> " + json.toString());
String id = json.getString("familia_id");
Log.d(TAG, "id -> " + id);
int id_family = Integer.parseInt(json
.getString("familia_id"));
// for each Familia
Familia familia = new Familia(json.getInt("familia_id"),
json.getString("nom_familia"));
helper.getFamiliaDao().create(familia);
families += json.getString("nom_familia");
Log.d(TAG, "Familia inserida -> " + familia);
}
Log.d(TAG, "families actualitzades! " + families);
} catch (SQLException e) {
e.printStackTrace();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
得到响应后,您必须将
结果
转换为JSONObject
like
JSONObject jsonObj = new JSONObject(result);
FamiliesArray = jsonObj.getJSONArray(Families);
我可以看出您没有注意到这一点。您的代码没有错,但是 这些线路可能会产生问题 我还是不确定 评论这些行
Log.d(TAG,"arrayJson ->"+arrayJson.toString());
替换你的代码
Familia familia = new Familia(json.getInt("familia_id"),
json.getString("nom_familia"));
到
因为server send familia_id是字符串形式。希望这项工作…:) 您所指的代码似乎是正确的。可以修剪字符串并尝试将修剪后的字符串传递给JSONArray的构造函数吗
另一方面,我建议使用jackson解析器将JSON转换为类(对象)。示例可以在这里找到,发布代码而不是照片。如何获得
结果的值?开头可能有一些非打印字符吗?@Chris检查我的answer@Override受保护的字符串doInBackground(String…url){return GET(url[0]);}以文本格式发布json字符串,而不是以图像的形式发布。实际上,该值是一个数组,而不是一个对象。所以你的建议行不通。但我在json中的一个数组中接收到3个对象。。。首先我需要做一个JSONArray,然后是一个循环,然后在这个循环中做JSONObject,对吗?就像我在消息中添加的代码一样。是的,但我想看看它正在创建的JSONArray。。。没有,因为应用程序在尝试创建JSONArray时崩溃…:-(Log.d(TAG,“jsonArray->”+jArray);现在检查这一行,因为这一行没有打印在您的日志中。嘿,只需在这个链接上检查您的json,因为对我来说,您的json格式显示无效[{“familia_id”:“28”,“nom_familia”:“Activitats f\u00c3\u00adsiques i esportives”},{“familia_id”:“29”,“nom_familia”:“Administraci\u00c3\u00b3 i gesti\u00c3\u00b3”},{“familia_id:“30”,“nom_familia:“Comer\u00c3\u00a7 i m\u00c3\u00a0rqueting”}是的,我很抱歉。我只是在尝试一些事情…这是为了做一个测试。但我也尝试了getString…两个都不起作用:-(你在哪个android版本上检查我真正的设备是API 10
Familia familia = new Familia(json.getInt("familia_id"),
json.getString("nom_familia"));
Familia familia = new Familia(Integer.parseInt(json.getString("familia_id")),
json.getString("nom_familia"));