2013-01-16 99 views
2

我有我的應用程序使用Koush的網絡套接字/ Socket.IO庫只是一個片段。 (https://github.com/koush/android-websockets)Android的Socket.IO與片段

我有一些問題,讓Socket.IO客戶端正常工作與片段生命週期及其線程。

在大多數情況下,我的片段是這樣的:


public class ScoresFragment extends SherlockFragment { 

    public SocketIOClient socket; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     createSocket(); 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public void onPause() { 
     try { 
      this.socket.disconnect(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     super.onPause(); 
    } 

    @Override 
    public void onResume() { 
     socket.connect(); 
     super.onResume(); 
    } 

    public void createSocket() { 
     this.socket = new SocketIOClient(URI.create("http://blah-url"), new SocketIOClient.Handler() { 
      //Required methods here 
     } 
    } 

    @Override 
    public void onCreateView(LayoutInflater inflater, ViewGroup group, Bundle savedInstanceState) { 
     //Everything for the layout here 
    } 
} 

而我得到的錯誤是在的onPause()方法時我試圖拔掉插座。 套接字連接正常,但只要我改變了碎片,我就會崩潰。

 
FATAL EXCEPTION: main 
java.lang.NullPointerException 
    at com.codebutler.android_websockets.SocketIOClient.cleanup(SocketIOClient.java:195) 
    at com.codebutler.android_websockets.SocketIOClient.disconnect(SocketIOClient.java:188) 
    at edu.bgsu.asf.athletics.fragments.ScoresFragment.onPause(ScoresFragment.java:14) 

我讀的地方,我可能要警惕線程的,我也可以使用一個處理程序這一點,但對於網絡套接字git的頁面沒有暗示不必使用這樣的事情。提前致謝。

編輯:

SocketIOClient.java的部分:

public void disconnect() throws IOException { 
    cleanup(); //Line 188 
} 

///////////////////////////////////////////// 

private void cleanup() { 
    mClient.disconnect(); 
    mClient = null; 

    mSendLooper.quit(); //Line 195 
    mSendLooper = null; 
    mSendHandler = null; 
} 

回答

0

創建靜態插座,它在父活動連接在你的片段謊言。之後,當您的片段通過發射方法創建訂閱。並在父活動的onStop方法中關閉套接字。按照這些說明使其工作。