Android从arraylist获取正确的值

时间:2012-04-09 01:15:18

标签: android

好的,我会尝试用最好的方式来描述这个。

我有一个聊天应用程序,我正在发送请求以接收公共频道列表。 我从服务器收到的字符串是:

RESP_PUBLICCHANNELLIST, channelID 1, channelName 1, channelID 2, channelName 2

当我将此列表添加到AlertDialog时,它会将每个频道和频道ID显示为单独的频道。我想在AlertDialog中拥有频道名称,并在地图中包含具有键值的频道ID。这可能吗?

这是我目前的代码,我遇到了问题:

 public void ShowPublicChannelList(){

     String PublicChannelsPost = "";
     PublicChannelsPost = ExecuteCommand(_chatProtocol.ShowPublicChannelList());
     System.out.println("Public Channels: " + PublicChannelsPost);
     _publicChannels.add("New..");

     List <String> responseList = Arrays.asList(PublicChannelsPost.split(","));
        if (responseList.contains("RESP_PUBLICCHANNELLIST")){
            for (int i = 1; i < responseList.size(); i++) {
                _publicChannels.add(responseList.get(i));
                System.out.println("Channels: " + _publicChannels);
            }   
                SetPublicChannelList(_publicChannels);
                }

任何帮助都会很棒!

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您不确定如何将服务器响应解析为通道ID和名称的映射?您可以简单地逐步执行分隔字符串列表,步骤为2,并将每对填充到一个映射条目中。这确实假设频道ID后面跟着一个频道名称(反之亦然:每个名字前面都有一个id)。

if (responseList.contains("RESP_PUBLICCHANNELLIST")) {
    Map<String, String> channelMap = new HashMap<String, String>();
    for (int i=1; i<responseList.size(); i+=2) {
        if (i+1 >= responseList.size()) break; // this only happens if not every id has name
        channelMap.put(responseList.get(i), responseList.get(i+1));
    }

    // print values to check correct mapping
    for (Map.Entry<String, String> channel : channelMap.entrySet()) System.out.println(channel.getKey() + " | " +channel.getValue());
}

如您所见,如果源列表的长度为“意外”,我只是打破循环。你可能想考虑实施更强大的东西,除非你绝对确定非法案件永远不会出现。