我只是想在我的UserJoinedRoomHandler中设置一个房间变量(将用户的名字添加到房间变量中): 从我的JAVA扩展程序:
public class UserJoinedRoomHandler extends BaseServerEventHandler
{
@Override
public void handleServerEvent(ISFSEvent arg0) throws SFSException
{
User user = (User) arg0.getParameter(SFSEventParam.USER);
Room room = (Room) arg0.getParameter(SFSEventParam.ROOM);
trace("add p1 = " + user.getName() + " to room=" + room.getId());
List<RoomVariable> listOfVars = new ArrayList<RoomVariable>();
listOfVars.add( new SFSRoomVariable("player1Name", user.getName()) );
((MyExtension) getParentExtension()).sfsApi.setRoomVariables(user, room, listOfVars); // NullPointerException here :(
}
}
注意,我在MyExtention init()函数中抓取sfsAPI:
ISFSApi sfsApi = SmartFoxServer.getInstance().getAPIManager().getSFSApi();
对我来说这应该有效,我唯一能想到的是房间可能没有完全初始化(用户刚刚在此事件被触发之前创建了房间)。但无论如何我认为这应该是一个微不足道的场景,但它已经花了我很多时间。
欢呼任何帮助。
答案 0 :(得分:0)
解决方案是直接使用Api:
((MyExtension)getParentExtension())。getApi()。setRoomVariables(user,room,listOfVars);
PS:不幸的是,没有办法发出1个房间变量。你必须提交一份清单,即使其长度只有1个。