超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

Android 開(kāi)發(fā)即時(shí)聊天工具 YQ :(四) 獲取好友列表

admin
2013年2月25日 14:23 本文熱度 4989

Android 開(kāi)發(fā)即時(shí)聊天工具 YQ :(三) 實(shí)現(xiàn)登陸功能中已經(jīng)實(shí)現(xiàn)了登陸功能,離能聊天又近了一步了 :)


在實(shí)現(xiàn)聊天之前還有一個(gè)重要的東西,?沒(méi)錯(cuò),就是好友列表,沒(méi)的好友你和誰(shuí)聊呀,是吧,


嘿嘿,一切從簡(jiǎn),早點(diǎn)實(shí)現(xiàn)基本的聊天目標(biāo)的說(shuō),所以代碼很懶(or 爛?),為什么呢?看完就知道了,


在服務(wù)器端當(dāng)?shù)顷懗晒螅麻_(kāi)一個(gè)線程,用來(lái)服務(wù)器和該賬號(hào)通信,這樣服務(wù)器端就可以處理別的登陸請(qǐng)求了,





[java]


  1. if(u.getOperation().equals("login")){ //登錄   

  2.                 int account=u.getAccount();  

  3.                 boolean b=new UserDao().login(account, u.getPassword());//連接數(shù)據(jù)庫(kù)驗(yàn)證用戶   

  4.                 if(b){  

  5.                     System.out.println(MyData.getDate()+"'"+account+"' 上線了!");  

  6.                     m.setType(YQMessageType.SUCCESS);//返回一個(gè)成功登陸的信息包   

  7.                     oos.writeObject(m);  

  8.                     ServerConClientThread cct=new ServerConClientThread(s);//單開(kāi)一個(gè)線程,讓該線程與該客戶端保持連接   

  9.                     ManageServerConClient.addClientThread(u.getAccount(),cct);  

  10.                     cct.start();//啟動(dòng)與該客戶端通信的線程   

  11.                 }else{  

  12.                     m.setType(YQMessageType.FAIL);  

  13.                     oos.writeObject(m);  

  14.                 }  

  15.             }else if(u.getOperation().equals("register")){  

  16.                 //注冊(cè)   

  17.             }  
服務(wù)器和某個(gè)客戶端通信的線程:




[java]


  1. public class ServerConClientThread extends Thread {  

  2.     Socket s;  

  3.     public ServerConClientThread(Socket s){  

  4.         this.s=s;  

  5.     }  

  6.   

  7.     public void run() {  

  8.         while(true){  

  9.             ObjectInputStream ois = null;  

  10.             YQMessage m = null;  

  11.             try {  

  12.                 ois=new ObjectInputStream(s.getInputStream());  

  13.                 m=(YQMessage) ois.readObject();  

  14.                 //對(duì)從客戶端取得的消息進(jìn)行類型判斷,做相應(yīng)的處理   

  15.                 if(m.getType().equals(YQMessageType.COM_MES)){//如果是普通消息包   

  16.                     //取得接收人的通信線程   

  17.                     ServerConClientThread scc=ManageServerConClient.getClientThread(m.getReceiver());  

  18.                     ObjectOutputStream oos=new ObjectOutputStream(scc.s.getOutputStream());  

  19.                     //向接收人發(fā)送消息   

  20.                     oos.writeObject(m);  

  21.                 }else if(m.getType().equals(YQMessageType.GET_ONLINE_FRIENDS)){//如果是請(qǐng)求好友列表   

  22.                     //操作數(shù)據(jù)庫(kù),這里返回的是所有的用戶列表,先留著坑,以后填,增加好友   

  23.                     //暫時(shí)將結(jié)果揉成string類型,以后可以改為json   

  24.                     String res=new UserDao().getUser();  

  25.                     //發(fā)送好友列表到客戶端   

  26.                     ServerConClientThread scc=ManageServerConClient.getClientThread(m.getSender());  

  27.                     ObjectOutputStream oos=new ObjectOutputStream(scc.s.getOutputStream());  

  28.                     YQMessage ms=new YQMessage();  

  29.                     ms.setType(YQMessageType.RET_ONLINE_FRIENDS);  

  30.                     ms.setContent(res);  

  31.                     oos.writeObject(ms);  

  32.                 }  

  33.             } catch (Exception e) {  

  34.                 e.printStackTrace();  

  35.                 try {  

  36.                     s.close();  

  37.                     ois.close();  

  38.                 } catch (IOException e1) {  

  39.                       

  40.                 }  

  41.             }  

  42.         }  

  43.     }  

  44. }  
可以看到已經(jīng)有了處理請(qǐng)求好友列表的代碼了,現(xiàn)在知道為什么說(shuō)代碼寫(xiě)的爛了吧,哈哈,


在客戶端中,與上面類似:





[java]


  1. if(ms.getType().equals(YQMessageType.SUCCESS)){  

  2.                 //創(chuàng)建一個(gè)該賬號(hào)和服務(wù)器保持連接的線程   

  3.                 ClientConServerThread ccst=new ClientConServerThread(context,s);  

  4.                 //啟動(dòng)該通信線程   

  5.                 ccst.start();  

  6.                 //加入到管理類中   

  7.                 ManageClientConServer.addClientConServerThread(((User)obj).getAccount(), ccst);  

  8.                 b=true;  

  9.             }else if(ms.getType().equals(YQMessageType.FAIL)){  

  10.                 b=false;  

  11.             }  

將客戶端連接服務(wù)器的線程為什么要加到ManageClientServer這個(gè)類中,就是方便隨時(shí)可以得到ObjectOutputStream對(duì)象,以便想服務(wù)器發(fā)送數(shù)據(jù),當(dāng)然也可以寫(xiě)一個(gè)專門發(fā)送數(shù)據(jù)的線程。



在客戶端登陸成功后,向服務(wù)器發(fā)送一個(gè)請(qǐng)求好友列表的包:





[java]


  1. //發(fā)送一個(gè)要求返回在線好友的請(qǐng)求的Message   

  2.                 ObjectOutputStream oos = new ObjectOutputStream (  

  3.                         ManageClientConServer.getClientConServerThread(user.getAccount()).getS().getOutputStream());  

  4.                 YQMessage m=new YQMessage();  

  5.                 m.setType(YQMessageType.GET_ONLINE_FRIENDS);  

  6.                 m.setSender(user.getAccount());  

  7.                 oos.writeObject(m);  




在得到好友列表后,顯示到好友列表中就OK,listView 和adapter種種,就不詳細(xì)說(shuō)了,


完成后效果如圖:






話說(shuō)安卓模擬器永遠(yuǎn)是3G信號(hào),永遠(yuǎn)在充電,,,,


該文章在 2013/2/25 14:23:21 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved