0

我在我的 Android 应用程序中使用 SendBird 聊天 API,并且在元数据中获得超过 1 个值时遇到问题。

这就是 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,这是正确的。

4

1 回答 1

0

3.0.0 也有类似的问题,但现在已修复。

关于您粘贴的代码,它应该看起来像这样。

mGroupChannel.createMetaData(data, new BaseChannel.MetaDataHandler() {
    @Override
    public void onResult(Map<String, String> map, SendBirdException e) {
        // Toast.makeText(getContext(), String.valueOf(map.size()), Toast.LENGTH_LONG).show();

        List<String> keys = new ArrayList<String>();

        keys.add("address");
        keys.add("owner");

        mGroupChannel.getMetaData(keys, new BaseChannel.MetaDataHandler() {
            @Override
            public void onResult(Map<String, String> map, SendBirdException e) {
                Toast.makeText(getContext(), String.valueOf(map.size()), Toast.LENGTH_LONG).show();
            }
        });
    }
});

或者任何确保在完成getMetaData后调用的东西createMetaData都可以。

于 2016-09-17T12:01:57.423 回答