狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

Android 開發即時聊天工具 YQ :(四) 獲取好友列表

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

Android 開發即時聊天工具 YQ :(三) 實現登陸功能中已經實現了登陸功能,離能聊天又近了一步了 :)


在實現聊天之前還有一個重要的東西,?沒錯,就是好友列表,沒的好友你和誰聊呀,是吧,


嘿嘿,一切從簡,早點實現基本的聊天目標的說,所以代碼很懶(or 爛?),為什么呢?看完就知道了,


在服務器端當登陸成功后,新開一個線程,用來服務器和該賬號通信,這樣服務器端就可以處理別的登陸請求了,





[java]


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

  2.                 int account=u.getAccount();  

  3.                 boolean b=new UserDao().login(account, u.getPassword());//連接數據庫驗證用戶   

  4.                 if(b){  

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

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

  7.                     oos.writeObject(m);  

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

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

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

  11.                 }else{  

  12.                     m.setType(YQMessageType.FAIL);  

  13.                     oos.writeObject(m);  

  14.                 }  

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

  16.                 //注冊   

  17.             }  
服務器和某個客戶端通信的線程:




[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.                 //對從客戶端取得的消息進行類型判斷,做相應的處理   

  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.                     //向接收人發送消息   

  20.                     oos.writeObject(m);  

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

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

  23.                     //暫時將結果揉成string類型,以后可以改為json   

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

  25.                     //發送好友列表到客戶端   

  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. }  
可以看到已經有了處理請求好友列表的代碼了,現在知道為什么說代碼寫的爛了吧,哈哈,


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





[java]


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

  2.                 //創建一個該賬號和服務器保持連接的線程   

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

  4.                 //啟動該通信線程   

  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.             }  

將客戶端連接服務器的線程為什么要加到ManageClientServer這個類中,就是方便隨時可以得到ObjectOutputStream對象,以便想服務器發送數據,當然也可以寫一個專門發送數據的線程。



在客戶端登陸成功后,向服務器發送一個請求好友列表的包:





[java]


  1. //發送一個要求返回在線好友的請求的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種種,就不詳細說了,


完成后效果如圖:






話說安卓模擬器永遠是3G信號,永遠在充電,,,,


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