[問題] 使用Handler去抓到SocketThread的值

看板AndroidDev作者 (我是清流)時間11年前 (2014/07/05 23:13), 11年前編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/2 (看更多)
Android如果要使用Socket 一般會建議另外開一個Thread 但如何從主Thread去取得SocketThread的值 之前有網友回答使用handler 所以我想問一下我的作法有沒有問題 我先 ConnectHandler cnHandler =new ConnectHandler(this); 再執行 userNum=cnHandler.readInt(conSer); conSer物件是我連Socket的Thread 裡面有一個readInt()可以取得Server傳來的Integer public synchronized int readInt(){ int tempInt=-129; try { tempInt=this.dis.readInt(); } catch (IOException e) { e.printStackTrace(); } return tempInt; } 最後 class ConnectHandler 有下面這個函式 public int readInt(ConnectServer conSer){ int temp=conSer.readInt(); return temp; } 所以過程就是 主Thread呼叫Handler的函式,Handler的函式再去呼叫 SocketThread函式 但出來的結果 有時會成功 有時卻會出現 NullPointerException 因為我以前都沒用過Handler 但網路上找到的資料都是用在更新UI 所以我想確認一下我用Handler的方式是對的 另外再問一下,我看Handler的範例都是用 handleMessage() 難不成只有handleMessage()這個函式才能做到跨Thread溝通的神奇功能嗎 我自己定義的函式就無法做到 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.141.130.194 ※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1404573226.A.CB9.html ※ 編輯: llzzyy01 (220.141.130.194), 07/05/2014 23:28:00

07/06 00:56, , 1F
07/06 00:56, 1F

07/06 01:00, , 2F
你有主thread 去呼叫background 我覺得 不太適合
07/06 01:00, 2F

07/06 01:00, , 3F
應該是在主Thread 把Backgroung啟動之後 等他來通知你
07/06 01:00, 3F

07/06 01:01, , 4F
這才是正確的 除了要搞懂Handler的用法
07/06 01:01, 4F

07/06 01:02, , 5F
Observer Pattern 也請你了解一下 對你會很有幫助
07/06 01:02, 5F

07/06 02:00, , 6F
感謝~~
07/06 02:00, 6F
文章代碼(AID): #1Jk1Ogov (AndroidDev)
文章代碼(AID): #1Jk1Ogov (AndroidDev)