跳到主要内容

用户托管页面设计

提示

此功能在 5.12.0 版本开始支持。

页面架构设计

用户托管采用了 MVVM(Model-View-ViewModel)模式,结合了 Android 的 Fragment 和 Activity 生命周期管理,以及分层解耦的设计思想。每个层次在架构中都有明确的职责分工,旨在提高代码的可读性、可维护性和可扩展性。

  • Activity:作为页面的入口,负责加载和显示 Fragment,并传递必要的参数。
  • Fragment:负责界面的 UI 显示和用户交互逻辑处理,通过 ViewModel 获取数据并更新视图。
  • ViewModel:作为数据和业务逻辑的中间层,处理数据的获取、处理和更新,将数据变更通知给 Fragment。
  • Handler:作为业务数据处理的核心层,封装了数据获取和操作的具体实现,提供数据操作的接口。
  • Component:封装常用的 UI 控件和交互逻辑,提升组件复用性。
  • XML 布局文件:定义视图的结构、样式和布局,为 Fragment 提供 UI 支持。

架构模块角色

页面架构层次关系

Activity 层

  • 作用:
    • 作为页面的入口,负责初始化和加载 Fragment。
    • 管理页面跳转、启动参数的传递,并处理 Fragment 间的通信。

Fragment 层

  • 作用:
    • 作为主要的 UI 显示和交互逻辑处理层,负责加载和管理视图组件。
    • 处理用户交互事件,如按钮点击、输入框变化等。
    • 通过 ViewModel 获取和观察数据,并根据数据变化更新视图。
  • 自定义方法:
    • onCreateViewModel():
      • 通过 ViewModelProvider 创建 ViewModel 实例。可以根据需求重写该方法返回自定义的 ViewModel 类。
    • onCreateView():
      • 通过 super.onCreateView() 调用父类的布局加载逻辑,并在父类的基础上进行自定义视图的添加或调整。
    • onViewReady():
      • 绑定 LiveData 数据,设置点击事件监听器,更新 UI。

ViewModel 层

  • 作用:
    • 作为 Fragment 与数据层之间的桥梁,负责管理和处理业务逻辑。
    • 通过 LiveData 等机制,将数据的变更通知给 Fragment。
    • 调用 Handler 进行数据的获取、更新或提交等操作。
  • 自定义方法:
    • 增加新的业务逻辑处理方法,或创建新的 LiveData 属性。

Handler 层

  • 作用:
    • 作为数据操作的具体实现层,封装对数据源的具体调用,避免内存泄露。
    • 提供数据的获取、保存、更新、删除等方法,为 ViewModel 提供接口。

Component 层

  • 作用:
    • 封装常用视图组件,提高组件复用性。

XML 布局文件层

  • 作用:
    • 定义视图的结构、样式和布局,是 UI 展示的基础。
    • 通过布局文件,可以快速定义和修改视图结构。

架构流程

自定义指南

KitFragmentFactory 的作用

KitFragmentFactory 是 Kit 中用于创建 Fragment 的工厂类,可以帮助开发者灵活管理和替换 Fragment。通过继承 KitFragmentFactory 并重写需要自定义的 Fragment,例如 newGroupProfileFragment() 方法,返回自定义的 GroupProfileFragment

public class CustomKitFragmentFactory extends KitFragmentFactory {
@NonNull
@Override
public GroupProfileFragment newGroupProfileFragment(@NonNull Bundle args) {
CustomGroupProfileFragment fragment = new CustomGroupProfileFragment();
fragment.setArguments(args);
return fragment;
}
}


// 设置自定义工程,在 Application 中初始化 IMUIKit,并设置自定义的 Fragment 工厂:
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// 设置自定义的 Fragment 工厂
IMCenter.setKitFragmentFactory(new CustomKitFragmentFactory());
}
}

自定义 Fragment

  • 范围:

    • 重写 onCreateView()onViewReady() 方法,添加自定义视图组件和交互逻辑。
    • 处理特定的 UI 逻辑和用户交互,如按钮点击、页面刷新等。
  • 建议:

    • 将所有的业务逻辑交由 ViewModel 处理,Fragment 只负责 UI 展示和用户交互事件的监听。
    • 通过 ViewModel 获取数据和监听数据变化,避免直接操作数据源。
// 自定义 Fragment (比如:CustomGroupProfileFragment) 
public class CustomGroupProfileFragment extends GroupProfileFragment {

// 重写返回自定义的 ViewModel (比如:CustomGroupProfileViewModel)
@Override
protected GroupProfileViewModel onCreateViewModel(Bundle bundle) {
return new ViewModelProvider(this, new ViewModelFactory(bundle))
.get(CustomGroupProfileViewModel.class);
}

@Override
protected void onViewReady(@NonNull GroupProfileViewModel viewModel) {
super.onViewReady(viewModel);

// 更改标题内容
headComponent.setTitleText("新标题");

// 重写标题栏返回按钮点击事件
headComponent.setLeftClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 自定义返回按钮的逻辑
}
});

// 重写标题栏右侧按钮点击事件(如果有)
headComponent.setRightClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 自定义右侧按钮的逻辑
}
});

// 设置标题栏右侧按钮图标
headComponent.setRightTextDrawable(R.drawable.rc_right_icon);
}
}

自定义 ViewModel

  • 范围:

    • 增加自定义的业务逻辑处理方法,如数据过滤、转换等。
    • 创建新的 LiveData 属性,以便 Fragment 监听数据变化。
  • 建议:

    • ViewModel 中封装所有的业务逻辑,避免将逻辑写入 FragmentHandler 中。
    • 通过 Handler 处理数据获取和操作,避免 ViewModel 直接与数据源交互。
// 自定义 ViewModel (比如:CustomGroupProfileViewModel)
public class CustomGroupProfileViewModel extends GroupProfileViewModel {

public CustomGroupProfileViewModel(@NonNull Bundle arguments) {
super(arguments);
}

// 添加自己的业务逻辑
}

自定义 XML 布局文件

  • 范围:

    • 开发者可以将原 Kit 页面对应的 XML 布局文件,复制到应用的 res/layout 目录下,在原有基础上添加或调整视图组件。
    • 定义自定义视图的属性和样式,如颜色、大小、间距等。
  • 注意事项:

    • 不要删除原始布局中的 View: 即使不需要某些默认视图,也不要删除它们。可以通过将 visibility 设置为 GONEINVISIBLE 来隐藏视图。
    • 不要修改原视图的 id: 修改原始 Viewid 可能导致 GroupProfileFragment 的逻辑异常。

Handler 功能概述

作用:作为业务数据处理的核心层,封装了数据获取和操作的具体实现,提供数据操作的接口。

GroupInfoHandler

GroupInfoHandler 主要用于获取群组的基本信息和指定成员的详细信息,并通过 DataKey 标识不同的数据操作类型,便于监听和处理。以下是 GroupInfoHandler 的对外接口说明及 DataKey 定义:

public class GroupInfoHandler extends MultiDataHandler {

// 用于标识获取群组信息的 DataKey
public static final DataKey<GroupInfo> KEY_GROUP_INFO =
MultiDataHandler.DataKey.obtain("KEY_GROUP_INFO", GroupInfo.class);

// 用于标识获取群成员信息的 DataKey
public static final DataKey<List<GroupMemberInfo>> KEY_GET_GROUP_MEMBERS =
MultiDataHandler.DataKey.obtain("KEY_GET_GROUP_MEMBERS",
(Class<List<GroupMemberInfo>>) (Class<?>) List.class);

// 用于标识搜索群成员的 DataKey
public static final DataKey<List<GroupMemberInfo>> KEY_SEARCH_GROUP_MEMBERS =
MultiDataHandler.DataKey.obtain("KEY_SEARCH_GROUP_MEMBERS",
(Class<List<GroupMemberInfo>>) (Class<?>) List.class);

/**
* 获取群组信息
* @description 获取指定群组的详细信息,并将结果通过监听器回调通知给调用方。
*/
public void getGroupsInfo() {
// 从服务器获取指定群组的详细信息,包括群名称、群公告、群头像等。
// 结果通过监听器回调给调用方,成功时返回群组信息,失败时返回错误码。
}

/**
* 获取群成员信息
* @param userIds 用户ID列表
* @description 获取指定用户ID列表对应的群成员信息,并将结果通过监听器回调通知给调用方。
*/
public void getGroupMembers(List<String> userIds) {
// 获取指定用户ID列表在当前群组中的详细信息,如成员角色、加入时间等。
// 结果通过监听器回调给调用方,成功时返回群成员信息列表,失败时返回错误码。
}

/**
* 搜索群成员
* @param name 成员名称
* @description 根据成员名称搜索群成员,并将结果通过监听器回调通知给调用方。
*/
public void searchGroupMembers(String name) {
// 根据成员名称在当前群组中搜索匹配的成员信息。
// 结果通过监听器回调给调用方,成功时返回搜索到的成员信息列表,失败时返回错误码。
}
}

DataKey 说明

  • KEY_GET_GROUP_MEMBERS: 标识用于获取群成员信息的数据键,类型为 List<GroupMemberInfo>
  • KEY_TOTAL_GROUP_MEMBERS: 标识群成员总数的数据键,类型为 Integer。
  • KEY_LOAD_MORE: 标识是否可以加载更多群成员数据的键,类型为 Boolean。

GroupMembersPagedHandler

GroupMembersPagedHandler 用于分页获取群成员列表,支持按角色分页获取群成员信息,并提供加载更多的功能。以下是 GroupMembersPagedHandler 的对外接口说明及 DataKey 定义:

public class GroupMembersPagedHandler extends MultiDataHandler {

// 用于标识获取群成员信息的 DataKey
public static final DataKey<List<GroupMemberInfo>> KEY_GET_GROUP_MEMBERS =
MultiDataHandler.DataKey.obtain("KEY_GET_GROUP_MEMBERS",
(Class<List<GroupMemberInfo>>) (Class<?>) List.class);

// 用于标识是否可以加载更多群成员数据的 DataKey
private static final DataKey<Boolean> KEY_LOAD_MORE =
DataKey.obtain("KEY_LOAD_MORE", Boolean.class);

/**
* 获取群成员信息
* @param groupMemberRole 群成员角色
* @description 根据指定的群成员角色获取成员列表,支持分页获取。
*/
public void getGroupMembersByRole(@NonNull GroupMemberRole groupMemberRole) {
// 此方法用于按角色获取群成员列表,如所有者、管理员、普通成员等。
// 支持分页加载,通过监听器回调返回结果,成功时返回群成员列表,失败时返回错误码。
}

/**
* 加载下一页群成员数据
* @param listener 数据变化监听器
* @description 加载更多群成员信息,并将结果通过监听器回调通知给调用方。
*/
public void loadNext(OnDataChangeListener<Boolean> listener) {
// 此方法用于加载当前群成员角色的下一页数据。
// 成功加载时,通过监听器返回 true,否则返回 false。
}

/**
* 是否还有下一页数据
* @description 检查当前是否还有更多的群成员数据可以加载。
* @return true 表示还有更多数据,false 表示数据已加载完毕。
*/
public boolean hasNext() {
// 返回当前是否还有更多数据可以加载。
return !TextUtils.isEmpty(nextPageToken);
}
}

DataKey 说明

  • KEY_GET_GROUP_MEMBERS: 标识用于获取群成员信息的数据键,类型为 List<GroupMemberInfo>
  • KEY_TOTAL_GROUP_MEMBERS: 标识群成员总数的数据键,类型为 Integer。
  • KEY_LOAD_MORE: 标识是否可以加载更多群成员数据的键,类型为 Boolean。

GroupOperationsHandler

GroupOperationsHandler 提供对群组的各种操作接口,如创建群组、邀请用户加入、踢出群成员、更新群组信息、解散和退出群组等。以下是 GroupOperationsHandler 的对外接口说明及 DataKey 定义:

public class GroupOperationsHandler extends MultiDataHandler {

// 用于标识创建群组操作的 DataKey
public static final DataKey<IRongCoreEnum.CoreErrorCode> KEY_CREATE_GROUP =
DataKey.obtain("KEY_CREATE_GROUP", IRongCoreEnum.CoreErrorCode.class);

// 用于标识邀请用户加入群组操作的 DataKey
public static final DataKey<Boolean> KEY_INVITE_USERS_TO_GROUP =
DataKey.obtain("KEY_INVITE_USERS_TO_GROUP", Boolean.class);

// 用于标识踢出群成员操作的 DataKey
public static final DataKey<Boolean> KEY_KICK_GROUP_MEMBERS =
DataKey.obtain("KEY_KICK_GROUP_MEMBERS", Boolean.class);

// 用于标识更新群组信息操作的 DataKey
public static final DataKey<Boolean> KEY_UPDATE_GROUP_INFO =
DataKey.obtain("KEY_UPDATE_GROUP_INFO", Boolean.class);

// 用于标识退出群组操作的 DataKey
public static final DataKey<Boolean> KEY_QUIT_GROUP =
DataKey.obtain("KEY_QUIT_GROUP", Boolean.class);

// 用于标识解散群组操作的 DataKey
public static final DataKey<Boolean> KEY_DISMISS_GROUP =
DataKey.obtain("KEY_DISMISS_GROUP", Boolean.class);

/**
* 创建群组
* @param groupInfo 群组信息
* @param inviteeUserIds 邀请加入群组的用户ID列表
* @description 创建群组,并邀请指定用户加入,结果通过监听器回调通知给调用方。
*/
public void createGroup(GroupInfo groupInfo, List<String> inviteeUserIds) {
// 此方法用于创建一个新的群组,并邀请指定用户加入。
// 结果通过监听器回调,成功时返回群组创建成功的结果,失败时返回错误码。
}

/**
* 邀请用户加入群组
* @param userIds 用户ID列表
* @description 邀请指定用户加入群组,并将结果通过监听器回调通知给调用方。
*/
public void inviteUsersToGroup(@NonNull List<String> userIds) {
// 此方法用于邀请指定用户加入当前群组。
// 结果通过监听器回调,成功时返回 true,失败时返回 false。
}

/**
* 踢出群成员
* @param userIds 用户ID列表
* @param config 退出群组的配置
* @description 将指定用户从群组中踢出,并将结果通过监听器回调通知给调用方。
*/
public void kickGroupMembers(List<String> userIds, QuitGroupConfig config) {
// 此方法用于将指定用户从群组中踢出,通常需要群主或管理员权限。
// 结果通过监听器回调,成功时返回 true,失败时返回 false。
}

/**
* 更新群组信息
* @param groupInfo 群组信息
* @description 更新群组的基本信息,如群组名称、头像、公告等,并将结果通过监听器回调通知给调用方。
*/
public void updateGroupInfo(@NonNull GroupInfo groupInfo) {
// 此方法用于更新群组的基本信息。
// 结果通过监听器回调,成功时返回 true,失败时返回 false。
}

/**
* 退出群组
* @param config 退出群组配置
* @description 退出当前群组,并将结果通过监听器回调通知给调用方。
*/
public void quitGroup(QuitGroupConfig config) {
// 此方法用于退出当前群组,通常在用户选择退出群组时调用。
// 结果通过监听器回调,成功时返回 true,失败时返回 false。
}

/**
* 解散群组
* @description 解散当前群组,并将结果通过监听器回调通知给调用方。
*/
public void dismissGroup() {
// 此方法用于解散当前群组,通常需要群主权限。
// 结果通过监听器回调,成功时返回 true,失败时返回 false。
}
}

DataKey 说明

  • KEY_CREATE_GROUP: 标识创建群组操作的数据键,类型为 IRongCoreEnum.CoreErrorCode。
  • KEY_INVITE_USERS_TO_GROUP: 标识邀请用户加入群组操作的数据键,类型为 Boolean。
  • KEY_KICK_GROUP_MEMBERS: 标识踢出群成员操作的数据键,类型为 Boolean。
  • KEY_UPDATE_GROUP_INFO: 标识更新群组信息操作的数据键,类型为 Boolean。
  • KEY_QUIT_GROUP: 标识退出群组操作的数据键,类型为 Boolean。
  • KEY_DISMISS_GROUP: 标识解散群组操作的数据键,类型为 Boolean。

GroupMembersFullHandler

GroupMembersFullHandler 用于一次性获取群组的所有成员信息,包括按角色分类获取群成员列表。该处理类通过监听数据变化与错误回调的方式通知外部类群成员信息的获取状态。

public class GroupMembersFullHandler extends MultiDataHandler {

// 用于标识获取所有群成员信息的 DataKey
public static final DataKey<List<GroupMemberInfo>> KEY_GET_ALL_GROUP_MEMBERS_BY_ROLES =
DataKey.obtain("KEY_GET_ALL_GROUP_MEMBERS_BY_ROLES",
(Class<List<GroupMemberInfo>>) (Class<?>) List.class);

/**
* 获取所有群成员
* @param groupMemberRole 群成员角色
* @description 根据指定的群成员角色获取所有群成员信息。该方法支持依次获取所有角色的成员信息,并通过回调通知外部类获取结果。
*/
public void getAllGroupMembersByRole(@NonNull GroupMemberRole groupMemberRole) {
// 此方法用于按角色获取群组中所有成员信息。
// 成功时,通过监听器返回群成员列表和总数,失败时返回错误码。
}
}

DataKey 说明

  • KEY_GET_ALL_GROUP_MEMBERS_BY_ROLES:标识获取所有群成员信息的数据键,类型为 List<GroupMemberInfo>
  • KEY_TOTAL_GROUP_MEMBERS:标识群成员总数的数据键,类型为 Integer。

FriendInfoHandler

FriendInfoHandler 用于管理好友信息,包括获取好友列表、检查好友关系、搜索好友等操作。它提供了多个方法和数据键来帮助开发者管理好友关系。

public class FriendInfoHandler extends MultiDataHandler {

// 用于标识检查好友关系的数据键
public static final DataKey<FriendRelationInfo> KEY_CHECK_FRIEND =
MultiDataHandler.DataKey.obtain("KEY_CHECK_FRIEND", FriendRelationInfo.class);

// 用于标识获取好友列表的数据键
public static final DataKey<List<FriendInfo>> KEY_GET_FRIENDS =
MultiDataHandler.DataKey.obtain("KEY_GET_FRIENDS",
(Class<List<FriendInfo>>) (Class<?>) List.class);

// 用于标识搜索用户的数据键
public static final DataKey<UserProfile> KEY_SEARCH_USER =
MultiDataHandler.DataKey.obtain("KEY_SEARCH_USER", UserProfile.class);

// 用于标识获取指定好友信息的数据键
public static final DataKey<FriendInfo> KEY_GET_FRIEND =
MultiDataHandler.DataKey.obtain("KEY_GET_FRIEND", FriendInfo.class);

// 用于标识删除好友的操作结果数据键
public static final DataKey<Boolean> KEY_DELETE_FRIEND =
MultiDataHandler.DataKey.obtain("KEY_DELETE_FRIEND", Boolean.class);

// 用于标识申请好友的操作结果数据键
public static final DataKey<IRongCoreEnum.CoreErrorCode> KEY_APPLY_FRIEND =
MultiDataHandler.DataKey.obtain("KEY_APPLY_FRIEND", IRongCoreEnum.CoreErrorCode.class);

// 用于标识搜索好友结果的数据键
public static final DataKey<List<FriendInfo>> KEY_SEARCH_FRIENDS =
MultiDataHandler.DataKey.obtain("KEY_SEARCH_FRIENDS",
(Class<List<FriendInfo>>) (Class<?>) List.class);

/**
* 获取好友列表
* @param directionType 查询方向
* @description 获取指定方向的好友列表,包括双向好友或单向好友。
*/
public void getFriends(QueryFriendsDirectionType directionType) {
// 获取好友列表,并通过监听器回调返回结果。
}

/**
* 检查好友关系
* @param userId 用户ID
* @description 检查指定用户ID的好友关系状态。
*/
public void checkFriend(String userId) {
// 检查是否与指定用户存在好友关系,结果通过监听器回调通知。
}

/**
* 获取指定好友信息
* @param userId 用户ID
* @description 获取指定用户ID的好友详细信息。
*/
public void getFriendInfo(String userId) {
// 获取指定用户的好友信息,结果通过监听器回调通知。
}

/**
* 删除好友
* @param userId 用户ID
* @param listener 数据变化监听器
* @description 删除指定用户ID的好友关系。
*/
public void deleteFriend(String userId, OnDataChangeListener<Boolean> listener) {
// 删除指定用户的好友关系,成功时返回 true,失败时返回 false。
}

/**
* 申请好友
* @param userId 用户ID
* @param remark 申请消息
* @param listener 数据变化监听器
* @description 向指定用户ID发送好友申请。
*/
public void applyFriend(
String userId,
String remark,
OnDataChangeListener<IRongCoreEnum.CoreErrorCode> listener) {
// 向指定用户发送好友申请,结果通过监听器回调通知。
}

/**
* 搜索用户信息
* @param uniqueId 唯一标识
* @description 通过唯一标识搜索用户信息。
*/
public void findUser(String uniqueId) {
// 通过唯一标识搜索用户信息,结果通过监听器回调通知。
}

/**
* 搜索好友信息
* @param query 查询关键字
* @description 通过查询关键字搜索好友信息。
*/
public void searchFriendsInfo(String query) {
// 通过关键字搜索好友信息,结果通过监听器回调通知。
}
}

DataKey 说明

  • KEY_CHECK_FRIEND:标识检查好友关系的数据键,类型为 FriendRelationInfo。
  • KEY_GET_FRIENDS:标识获取好友列表的数据键,类型为 List<FriendInfo>
  • KEY_SEARCH_USER:标识搜索用户的数据键,类型为 UserProfile。
  • KEY_GET_FRIEND:标识获取指定好友信息的数据键,类型为 FriendInfo。
  • KEY_DELETE_FRIEND:标识删除好友的操作结果数据键,类型为 Boolean。
  • KEY_APPLY_FRIEND:标识申请好友的操作结果数据键,类型为 IRongCoreEnum.CoreErrorCode。
  • KEY_SEARCH_FRIENDS:标识搜索好友结果的数据键,类型为 List<FriendInfo>

FriendApplicationHandler

FriendApplicationHandler 用于管理好友申请的相关操作,包括获取好友申请列表、接受好友申请和拒绝好友申请。以下是该处理类的对外接口说明及 DataKey 定义:

public class FriendApplicationHandler extends MultiDataHandler {

// 用于标识获取好友申请列表的数据键
public static final DataKey<PagingQueryResult> KEY_GET_FRIEND_APPLICATIONS =
MultiDataHandler.DataKey.obtain("KEY_GET_FRIEND_APPLICATIONS", PagingQueryResult.class);

// 用于标识接受好友申请操作的结果数据键
public static final DataKey<Boolean> KEY_ACCEPT_FRIEND_APPLICATIONS =
MultiDataHandler.DataKey.obtain("KEY_ACCEPT_FRIEND_APPLICATIONS", Boolean.class);

// 用于标识拒绝好友申请操作的结果数据键
public static final DataKey<Boolean> KEY_REJECT_FRIEND_APPLICATIONS =
MultiDataHandler.DataKey.obtain("KEY_REJECT_FRIEND_APPLICATIONS", Boolean.class);

/**
* 获取好友申请列表
*
* @param option 分页查询参数
* @param type 申请类型(接收/发送)
* @param status 申请状态(未处理、已处理等)
* @description 获取好友申请列表,支持分页查询,通过监听器回调返回结果。
*/
public void getFriendApplications(
PagingQueryOption option,
FriendApplicationType[] type,
FriendApplicationStatus[] status) {
// 获取好友申请列表
}

/**
* 接受好友申请
*
* @param userId 申请者的用户ID
* @param listener 数据变化监听器
* @description 接受指定用户的好友申请,并通过监听器回调返回操作结果。
*/
public void acceptFriendApplication(String userId, OnDataChangeListener<Boolean> listener) {
// 接受好友申请操作
}

/**
* 拒绝好友申请
*
* @param userId 申请者的用户ID
* @param listener 数据变化监听器
* @description 拒绝指定用户的好友申请,并通过监听器回调返回操作结果。
*/
public void refuseFriendApplication(String userId, OnDataChangeListener<Boolean> listener) {
// 拒绝好友申请操作
}
}

DataKey 说明

  • KEY_GET_FRIEND_APPLICATIONS:标识获取好友申请列表的数据键,类型为 PagingQueryResult。
  • KEY_ACCEPT_FRIEND_APPLICATIONS:标识接受好友申请操作结果的数据键,类型为 Boolean。
  • KEY_REJECT_FRIEND_APPLICATIONS:标识拒绝好友申请操作结果的数据键,类型为 Boolean。

UserProfileHandler

UserProfileHandler 用于管理用户的个人信息,包括获取当前用户信息及获取指定用户信息。以下是该处理类的对外接口说明及 DataKey 定义:

public class UserProfileHandler extends MultiDataHandler {

// 用于标识获取用户信息的数据键
public static final DataKey<UserProfile> KEY_GET_USER_PROFILE =
DataKey.obtain("KEY_GET_USER_PROFILE", UserProfile.class);

// 用于标识获取当前用户信息的数据键
public static final DataKey<UserProfile> KEY_GET_MY_USER_PROFILE =
DataKey.obtain("KEY_GET_MY_USER_PROFILE", UserProfile.class);

/**
* 获取当前用户信息
* @description 获取当前用户的个人信息,并通过监听器回调返回结果。
*/
public void getMyUserProfile() {
// 获取当前用户信息
}

/**
* 获取指定用户信息
*
* @param id 用户ID
* @description 获取指定用户的个人信息,并通过监听器回调返回结果。
*/
public void getUserProfile(String id) {
// 获取指定用户信息
}
}

DataKey 说明

  • KEY_GET_USER_PROFILE:标识获取指定用户信息的数据键,类型为 UserProfile。
  • KEY_GET_MY_USER_PROFILE:标识获取当前用户信息的数据键,类型为 UserProfile。

UserProfileOperationsHandler

UserProfileOperationsHandler 用于管理用户信息的更新操作,包括更新当前用户信息和设置好友信息。以下是该处理类的对外接口说明及 DataKey 定义:

public class UserProfileOperationsHandler extends MultiDataHandler {

// 用于标识更新用户信息的操作结果数据键
public static final DataKey<Boolean> KEY_UPDATE_MY_USER_PROFILE =
DataKey.obtain("KEY_UPDATE_MY_USER_PROFILE", Boolean.class);

// 用于标识设置好友信息的操作结果数据键
public static final DataKey<Boolean> KEY_SET_FRIEND_INFO =
DataKey.obtain("KEY_SET_FRIEND_INFO", Boolean.class);

/**
* 更新用户信息
* @param userProfile 用户信息
* @description 更新当前用户的个人信息,操作结果通过监听器回调通知。
*/
public void updateMyUserProfile(UserProfile userProfile) {
// 更新当前用户信息
}

/**
* 设置好友信息
* @param userId 用户ID
* @param remark 备注
* @param extProfile 扩展信息
* @description 设置指定好友的备注及扩展信息,操作结果通过监听器回调通知。
*/
public void setFriendInfo(final String userId, final String remark, final Map<String, String> extProfile) {
// 设置好友信息
}
}

DataKey 说明

  • KEY_UPDATE_MY_USER_PROFILE:标识更新当前用户信息的操作结果数据键,类型为 Boolean。
  • KEY_SET_FRIEND_INFO:标识设置好友信息的操作结果数据键,类型为 Boolean。