2012-04-09 10 views
0

これは私ができる最善の方法を説明しようとします。Androidがarraylistから正しい値を取得しています

私はチャットアプリケーションを持っており、パブリックチャンネルのリストの受信リクエストを送信しています。私は戻って、サーバから受信 文字列は次のとおりです。

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

あなたの質問が正しく分かっていれば、サーバーの応答をチャンネルIDと名前のマッピングに解析する方法がわかりませんか?あなたは2つのステップで分離された文字列のリストを単純に突き抜け、すべてのペアを1つのマップエントリに入れます。これは、チャネル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()); 
} 

ご覧のとおり、ソースリストの長さが「予期しない」場合は、ループを解除します。違法な事件が起こることが絶対に確実でない限り、より堅固なものを実装することを検討することをお勧めします。

+0

ありがとうございました! – DommyCastles

関連する問題