2013-01-16 45 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方法中关闭套接字。按照这些说明使其工作。