好的,我会尝试用最好的方式来描述这个。
我有一个聊天应用程序,我正在发送请求以接收公共频道列表。 我从服务器收到的字符串是:
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);
}
任何帮助都会很棒!
谢谢!
答案 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());
}
如您所见,如果源列表的长度为“意外”,我只是打破循环。你可能想考虑实施更强大的东西,除非你绝对确定非法案件永远不会出现。