0

好的,我会尽力描述这一点。

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

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);
                }

任何帮助都会很棒!

谢谢!

4

1 回答 1

1

如果我正确理解您的问题,您不确定如何将服务器响应解析为通道 ID 和名称的映射?您可以简单地用两个步骤遍历您的分隔字符串列表,并将每一对填充到一个映射条目中。这确实假设通道 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());
}

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

于 2012-04-09T02:45:48.673 回答