0
アクティビティクラス内のサービスクラスからソケット接続にアクセスしようとしています。emit
データをサーバにオンラインで接続しています。 アクティビティ内のサービスクラスからのソケット接続にアクセスする
MyService.java
public class MyService extends Service {
@Override
public IBinder onBind(Intent Intent)
{
return null;
}
@Override
public void onCreate() {
this.isRunning = false;
this.backgroundThread = new Thread(myTask);
}
private Runnable myTask = new Runnable() {
@Override
public void run() {
try {
// instantiate socket connection
mSocket = IO.socket(AppConstants.CHAT_SERVER_URL);
// establish the socket connection
mSocket.connect();
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(!this.isRunning) {
this.isRunning = true;
this.backgroundThread.start();
}
return START_STICKY;
}
public Socket getSocket() {
return mSocket;
}
}
MyApplication.java
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Intent background = new Intent(this, MyService.class);
startService(background);
}
}
MainActivity.java
public class MainActivity extends Activity {
Socket mSocket;
MyService mservice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSocket = mservice.getSocket();
}
public void sendMessage(View view){
mSocket.emit("new messaged", "this");
}
}
上記MainActivity
内sendMessage
方法は、接続が起動時に確立されても、トリガされたときに、ヌル誤差を与えます。
私は、私がbind
接続できるとmSocket
接続にアクセスするには、アクティビティクラス内ServiceConnection
クラスを使用することは非常に多くを知っている、しかし、私はそれにアクセスするにはこの方法またはbroadcast receiver
を使用しています。すべてのアイデアは、最善の離れてソケット接続にアクセスすることができますサービスクラスを境界には、アクティビティクラス。
私はサービスクラスから 'getSocket()'メソッドにアクセスしています。そのクラス内で既に設定されていますが、これより良い方法を提案してください。 – George
'mservice'をまず何かに設定する必要がありますその上で 'getSocket()'を呼び出すことができます! –