我正在尝试按名称订购我的JSON数据,我在这里找到了一些答案,但对我的情况没有任何作用。我已经尝试更新我的代码,如下所示。我在那里标记了我从原始代码中删除了什么,以及我添加了什么:
@Override
protected Boolean doInBackground(String... args) {
HttpHandler sh = new HttpHandler();
String url = "androidnews.json";
String jsonStr = sh.makeServiceCall(url);
if (jsonStr != null) {
try {
//removed this:
//JSONObject jsonObj = new JSONObject(jsonStr);
//JSONArray actors = jsonObj.getJSONArray("result");
//ADDED:
ArrayList<JSONObject> array = new ArrayList<JSONObject>();
JSONArray actors = new JSONArray("result");
for (int i = 0; i < actors.length(); i++) {
JSONObject c = actors.getJSONObject(i);
//ADDED:
array.add(actors.getJSONObject(i));
Actors actor = new Actors();
actor.setName(c.getString("name"));
actor.setThumb(c.getString("thumb"));
actorsList.add(actor);
}
//ADDED:
Collections.sort(array, new Comparator<JSONObject>() {
@Override
public int compare(JSONObject lhs, JSONObject rhs) {
// TODO Auto-generated method stub
try {
return (lhs.getString("name").toLowerCase().compareTo(rhs.getString("name").toLowerCase()));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}
});
} catch (final JSONException e) {
Zoznam.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(Zoznam.this.getApplicationContext(),
"Data error " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
}); }
return true;
} else {
Zoznam.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(Zoznam.this.getApplicationContext(),
"Chyba internetového pripojenia.",
Toast.LENGTH_LONG).show();
}
});
return false;
}
}
但是在测试之后,我有这个错误: java.lang.String类型的值结果无法转换为JSONArray
我的JSON以:{"result": [{"name": "Joe","thumb": "image.jpg",...
答案 0 :(得分:1)
我猜你正在使用org.json库。 目前,您正在尝试从字符串&#34;结果&#34;。
创建JSONArray这是您在JSON文件中访问数组的方式:
JSONObject obj = new JSONObject(Files.readAllLines(Paths.get("/path/to/your/file.json")));
JSONArray arr = obj.getJSONArray("number");
来源:more helpful examples like the one above
由于您似乎不熟悉org.json方法,我强烈建议您查看gson,因为它提供了一种将JSON条目映射到对象(甚至是对象的数组)的简单方法。
答案 1 :(得分:1)
不要对JSONArray进行排序,而是尝试使用自定义对象对Arraylist进行排序并使用它。你可以做这样的事情
Collections.sort(actorsList, new Comparator<Actors>() {
@Override
public int compare(Actors lhs, Actors rhs) {
return lhs.getName().compareTo(rhs.getName());
}
});