1

我想在发送后显示图像文件。但结果是空消息并显示在屏幕左侧(接收侧)。任何 url 集都会发生这种情况。

图像示例

我的item_list.xml

<com.stfalcon.chatkit.messages.MessagesList
        android:id="@+id/chat.room.messagesList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/chat.room.input" />

我的适配器:

adapter = new MessagesListAdapter<ChatMessage>(getMyChatUser().getId(), null);
        messagesList.setAdapter(adapter);

或者

adapter = new MessagesListAdapter<ChatMessage>(getMyChatUser().getId(), imageLoader);
        messagesList.setAdapter(adapter);

使用 ImageLoader

imageLoader = new ImageLoader() {
            @Override
            public void loadImage(ImageView imageView, @Nullable String url, @Nullable Object payload) {
                Picasso.with(getActivity()).load(url).into(imageView);
            }
        };

我的附件:

messageInput.setAttachmentsListener(new MessageInput.AttachmentsListener() {
   @Override
   public void onAddAttachments() {
      ChatMessage chatMessage = new ChatMessage(String.valueOf(new Random().nextInt()), null, getMyChatUser());
      chatMessage.setImage(urlImage);
      adapter.addToStart(chatMessage, true);
   }
});

ChatMessageMessageContentType.Image 正如官方指南所说的那样实施。

解决方案 实施是正确的。我传递了错误的 URL 格式

4

1 回答 1

1

几条笔记

当您希望适配器包含图像时,这是构造函数。

MessagesListAdapter<Message> adapter = new MessagesListAdapter<T>(senderId, imageLoader);
messagesList.setAdapter(adapter);

更多关于MessageListAdapter.java

/**
 * For default list item layout and view holder.
 *
 * @param senderId    identifier of sender.
 * @param imageLoader image loading method.
 */
public MessagesListAdapter(String senderId, ImageLoader imageLoader) {
   this(senderId, new MessageHolders(), imageLoader);
}

什么地方出了错

您正在传递null构造函数

adapter = new MessagesListAdapter<ChatMessage>(getMyChatUser().getId(), null);
        messagesList.setAdapter(adapter);

如果该方法返回 null,则适配器将消息识别为文本消息并以适当的形式显示它。如果图像的 url 存在,将使用我们传递给适配器的 ImageLoader 显示图像。

你可以做什么

创建类似这样的[1]并将其传递给MessageListAdapter

ImageLoader imageLoader = new ImageLoader() {
   @Override
   public void loadImage(ImageView imageView, String url) {
       Picasso.with(MessagesListActivity.this).load(url).into(imageView);
   }
};

阅读更多

于 2019-01-23T16:15:11.080 回答