繁体   English   中英

Android / Java:解析来自Rails的JSON数组

[英]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)

因为jsonResponseJSONObject的数组

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM