0

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 が返されることです。

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 に答える