实例讲解移动qq在线平台




该平台是基于wtk2.3的demo--snap mobile sample_community修改而成,界面汉化,以及一些功能做了局部调整。现在做实例讲解,主要让大家能深入理解这个snapmobile的sample。

看看我们要完成的的流程:
1.初始化
2.登陆
3.加载信息
4.查找用户
5.添加好友
6.聊天对话
7.好友上线
8.下线通知
9.离开
可以根据本文档提供的源代码,逐步理解它的构架和运作机制。
1.初始化
community类初始化 |
static void initialize() { /***com.nokia.sm.ui.view初始化***/ view.initialize(); /***好友列表框架初始化***/ buddyview.initialize(); /***软按钮初始化***/ buttonlistview.initialize(); /***发送信息框架初始化***/ chat.initialize(); /***确认信息框架初始化***/ dialog.initialize(); /*** 登陆框架初始化***/ login.initialize(); /***社区在线显示初始化***/ rankingview.initialize(); } |
2.登陆
连接对象发送统一登陆信息 |
try { /*** *连接对象执行extendedlogin命令发送(用户名,密码,游戏类名,在线显示属性) *来统一登陆snap, imps和web服务器, *同时服务器会返回好友列表和在线显示信息给returnvalues */ returnvalues = comm.extendedlogin( itemlist.getstring("user"), itemlist.getstring("pass"), itemlist.getinteger("gcid"), itemlist.getstring("presence") ); } catch (exception e) { string msg = "" + "cannot contact server. please verify " + "that properties snap-mobile-host and " + "snap-mobile-port point to a snap mobile " + "server. app will close in a few seconds."; /***显示出错信息***/ showerror(msg, true); /***延迟10秒***/ try {thread.sleep(10000);} catch (interruptedexception ie) {} } |
3.加载信息
获取好友列表 |
if (lasterror == null && cmd.equals("extendedlogin")) { /***获取服务器id ***/ websessionid = returnvalues.getstring("websessionid"); impssessionid = returnvalues.getstring("impssessionid"); snapsessionid = returnvalues.getstring("snapsessionid"); /*** 获取用户id***/ snapuserid = returnvalues.getstring("snapuserid"); /***获取好友列表***/ buddylist.set(returnvalues.getlist("buddylist")); //system.out.println(snapuserid+":"); } |
4.查找用户
该文档是利用rankinglist来实现在线用户显示的 |
if (errormessage != null) { community.showerror(errormessage, false); } else { list = results.getlist("rankinglist"); idname = "username"; table.clear(); for (i=0; i il = (itemlist)list.elementat(i); id = il.getstring(idname); rank = il.getinteger("rank"); score = il.getinteger("value"); //system.out.println(""+buddylist.aisavailable.tostring() ); online =community.snapuserid.equals(string.valueof(score)); row = new tablerow(new object[] {"" + rank, id, "" + online}, separator_list); row.setfont(table_font); row.setbackgroundimage(new image[] {null, slimon}); row.setdimension(slimon.getwidth(), slimon.getheight()); table.add(row); } |
5.添加好友
buddylist类主要实现更新列表,添加好友 |
/*******************更新好友列表**********************/ private void updatelisteners() { notifylisteners(new event(this, event.item_deselected, null)); } /***********************更新在线显示******************/ public synchronized void updatepresence(string name, boolean available) { buddy buddy = get(name); if (buddy != null) { aisavailable = buddy.isavailable(); buddy.setavailable(available); if (!aisavailable && available) onlinebuddycount++; if (aisavailable && !available) onlinebuddycount--; repaint(); updatelisteners(); } } /****************************添加好友***********************/ public synchronized void add(buddy buddy) { if (buddy.isavailable()) { onlinebuddycount++; } list.addelement(buddy); repaint(); updatelisteners(); } /*************************检索好友***********************/ public buddy get(int index) { return (buddy)list.elementat(index); } /***********************获取列表长度********************/ public int size() { return list.size(); } /*******************提取列表上的好友名单********************/ public synchronized buddy get(string name) { for (int i=0; i buddy buddy = (buddy)list.elementat(i); if (name.equals(buddy.getname())) { return buddy; } } return null; } /***************************移除好友***********************/ public synchronized void remove(string name) {
扫描关注微信公众号 |
闽公网安备 35060202000074号