[英]Android / Java : Parse Array of JSON coming from Rails
我的服务器是用Rails 4.x编写的,并且是通过API返回记录的to_json方法,用于向Android提供如下所示的JSON数组:
[{"id":503240,"name":"bob"},{"id":503241,"name":"Tom"}]
它归结为Android很好,使用它作为字符串并记录它没有问题。
现在,我想遍历数组的每个项目并获取id(最终将其显示在ListView上)。
我要做的第一件事是“看到”每个单独的对象。 因此,我使用以下代码行解析以上内容:
JSONArray jsonResponse = new JSONArray(jsonString);
它“解析”没有错误,但是...当我尝试执行jsonResponse [1]或jsonResponse.getObject(1)之类的操作时,便可以使用该数组的其中一个元素(只是将其记录为例如),我无法通过IDE告诉我做错了。
如果我可以解决和处理单个json对象,那么我确定解决单个数据元素不会有问题。 正是这种复杂性导致了问题。
我对Java有点陌生,但对Ruby和Swift却很满意。 我缺少基本的东西。 我究竟做错了什么?
提前致谢。
Android中的JSONArray
实例上似乎没有方法getObject
。 文档在这里 。
我想您需要的是:
jsonResponse.getJSONObject(1)
因为jsonResponse
是JSONObject
的数组
JSONArray包含一个名为JSONObject getJSONObject(int position)
,该方法返回JSONObject类型的项目,该项目在JSONArray中您需要的位置找到。
现在,如果要将JSON数组填充到列表视图中,则应为该列表视图创建一个适配器,并且每一行将包含该数组中每个项目的数据。
最常见的适配器是扩展BaseAdapter类,您会注意到您将需要实现一些方法,主要是
getCount
通常返回数组中的项数,因此基本上,当您返回0时,您将看不到任何内容,但是如果返回1或数组的大小,则listview将具有相同的行数。 getView
返回每行的视图,在此方法中,您需要在对行和所有行进行膨胀之后,使行的视图膨胀(您将需要创建一个将作为行布局的xml文件)。像textview和imageview这样的元素,您将需要填充数组中每个项目的数据。 该机制以这种方式工作:此方法的参数之一是行的位置,因此,当用户滚动列表时,将调用此方法并且位置将自动更新,在这种情况下,可以获取特定的数组中的项目,只需调用yourJSONArray.getJSONObject(position)
,然后用所需的数据填充每个文本字段。 请注意,为了创建一些有用的性能,有一种称为ViewHolder的东西,您应该创建一个ViewHolder,以避免在每次用户滚动时从android创建并填充行视图。
还有一件事是,您还可以阅读并检查recycleview。
要遍历一个JSONArray,只需使用这样的for循环
try {
JSONArray array = new JSONArray("[{\"id\":503240,\"name\":\"bob\"},{\"id\":503241,\"name\":\"Tom\"}]");
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
Log.d("TAG", "Object #" + i + " id: " + object.getInt("id") + " name: " + object.getString("name"));
}
} catch (JSONException e) {
Log.e("TAG", "Cannot parse json :", e);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.