【问题标题】:Android JSON Array ParsingAndroid JSON 数组解析
【发布时间】:2016-12-30 07:38:13
【问题描述】:

如何使用 webrequest 解析这个 Json API,即元素“Players”:

    {
    "data": [
        {
            "Id": *,
            "ModId": *,
            "appId": ***********,
            "online": *,
            "Servername": "**** **** *****",
            "IpAddress": "**.**.**.**",
            "Port": ****,
            "ServerPassword": ********,
            "StartParameters": "*******",
            "Slots": **,
            "Playercount": **,
            "Civilians": **,
            "Medics": *,
            "Cops": *,
            "Adac": *,
            "Players": [
                "***********",
                "***********",
                "******",
                "******"
            ]
        }
    ]
}

我希望它解析每次循环运行一个玩家名称以将其添加到列表视图时我得到的信息。 但我不知道如何解析这样的“玩家”元素。

感谢您的帮助!

【问题讨论】:

标签: android json api webrequest


【解决方案1】:

以下代码使用您的 JSON 字符串中的玩家填充列表。

List<String> players = new ArrayList<>();

try {
    JSONObject jsonObj = new JSONObject(jsonString);
    JSONArray data = jsonObj.getJSONArray("data");
    JSONObject dataObj = data.getJSONObject(0);
    JSONArray playersJson = dataObj.getJSONArray("Players");

    for (int i = 0; i < playersJson.length(); i++) {
        players.add(playersJson.get(i).toString());
    }
} catch (JSONException e) {
    Log.e(TAG, e.getMessage());
}

然后您可以将此列表与ArrayAdapter 一起使用来填充您的ListView

    ArrayAdapter<String> adapter;
    ListView listView = (ListView) findViewById(R.id.listView);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, players);
    listView.setAdapter(adapter);

【讨论】:

  • 而不是使用 adapter.notifyDataSetChanged();您是否尝试按照我的方式设置适配器?你有任何错误吗?如果是这样,请发布堆栈跟踪。
  • 我用你的 Listview 适配器试过了。没有变化,但我发现了错误但我不知道如何解决它。 volley 的响应完全是空的。
  • 你确定玩家被填充了吗?您可以记录列表的长度/内容以进行检查吗?此外,您应该在 catch 分支中放置一条日志语句,以防抛出异常。
【解决方案2】:

这里使用新概念Retofit你不需要解析只创建pojo类,参考下面的链接

https://square.github.io/retrofit/

【讨论】:

    【解决方案3】:

    使用下面的代码来解析响应。

    JSONObject objMain = new JSONObject(yourData);
            try {
                JSONArray respArray = objMain.getJSONArray("data");
                for(int i=0;i<respArray.length();i++)
                {
                    JSONObject dataObj = respArray.getJSONObject(i);
                    String id = dataObj.getString("id");
                    -
                            -
                    JSONArray arrayPlayer = dataObj.getJSONArray("players");
                    for(int j=0;j<arrayPlayer.length();j++){
                        JSONObject playerObj = arrayPlayer.getJSONObject(j);
                        ---
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
    

    并使用适当的参数获取剩余数据.. :)

    【讨论】:

      【解决方案4】:

      您可以保存从JSON 中删除了多少元素的索引。喜欢

      int index = 0;

      并创建一个可以访问JSON 的方法并将索引传递给它

      public String getPlayerFromJsonAtIndex(int i) {...}.

      现在访问 JSON 字符串并使用 JSONObject 解析它(提示在开始时立即存储解析的 Players 数组)。让你解析 Players 数组就像

      JSONArray players = (new JSONObject(jsonString))
        .getJSONArray("data")
        .get(0)
        .getJSONArray("Players");
      

      现在从这个玩家JSONArray 获取提供的索引处的字符串。喜欢

      {
        return (String)players.get(i);
      }
      

      希望对您有所帮助,谢谢。

      【讨论】:

      • 谢谢,但编译器在这一行说: .getJSONArray("Players"); : "无法解析方法....."
      猜你喜欢
      • 2013-01-11
      • 2015-03-19
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      相关资源
      最近更新 更多