Android アプリで SendBird チャット API を使用していますが、メタデータで複数の値を取得すると問題が発生します。
これが groupchannel メタデータの作成です。
final HashMap<String, String> data = new HashMap<String, String>();
data.put("owner", "Daniel");
data.put("address", "Else Street");
groupChannel.createMetaData(data, new BaseChannel.MetaDataHandler() {
@Override
public void onResult(Map<String, String> map, SendBirdException e) {
if(e != null) {
Toast.makeText(ctx, "" + e.getCode() + ":" + e.getMessage(), Toast.LENGTH_SHORT).show();
return;
}
onResult でマップを反復処理すると、"Daniel" と "Else Street" が得られます。これまでのところ、とても良いですよね?
問題は、メタデータを取得する必要がある場合です。
List<String> keys = new ArrayList<String>();
keys.add("owner");
keys.add("address");
mGroupChannel.getMetaData(keys, new BaseChannel.MetaDataHandler() {
@Override
public void onResult(Map<String, String> map, SendBirdException e) {
if (e != null) {
Toast.makeText(ChatActivity.this, "" + e.getCode() + ":" + e.getMessage(), Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(getBaseContext(), String.valueOf(map.size()), Toast.LENGTH_LONG).show();
}
});
map.size() メソッドは、実際には 2 を返すはずなのに 0 を返しています。問題は、アドレスまたは所有者を削除すると、正しい 1 が返されることです。