我正在使用socekt.io构建一个聊天应用程序,因此我创建了一个后台服务来处理Socekt.io。但是,每当我调用套接字全局变量时,它都为null。
我试图将其连接到Application类并从那里调用它,但似乎没有希望。唯一有效的方法是当我以这种方式添加连接而没有任何方法时:
Service.java
{
try {
AppMainClass app = (AppMainClass) getApplication();
setSocket(app.getSocket());
sh = new SharedPreferencesHandler(mContext);
// Set Connection Status to True
isConnected = true;
sh.saveAppPrefs("isConnected", "true");
} catch (URISyntaxException e) {
throw new RuntimeException(e);
} catch (Exception e) {
e.printStackTrace();
}
}
和
AppMainClass.java
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
try {
setSocket(IO.socket(Constants.REAL_TIME_CHAT_SERVER_URL));
getSocket().connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
这有一个很大的缺点,因为每次调用该方法或启动该类时它都会重新连接到服务器,而我不能只是将其添加到onStartCommnd()方法中,因为当我调用getSocket()时(“ getter “),则返回null,就好像从未调用过setSocket()一样。
最后,我最近才知道不建议在服务中使用套接字,但我不想依赖于GCM或任何其他类型的连接。
谢谢。