Socket.IO
接続を処理するために使用しているService
クラス内のRealmインスタンスにアクセスするのに問題があります。私はこれのようにonStartCommand
コールでRealm
インスタンスを取得しています。サービスでRealmインスタンスに正しくアクセスするにはどうすればよいですか?
public class SocketService extends Service{
Realm realmInstance;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
realmInstance = Realm.getDefaultInstance();
}
}
私はRealm
にいくつかのデータを格納する必要があるイベントを受信すると、ソケットのイベントに結合するときに問題があるが、それは以外のスレッドにアクセスすることができないRealm
オブジェクトを示す例外をスローそれが作成されたものです。
socket.on("register", new Emitter.Listener() {
@Override
public void call(Object... args) {
List<MyRealmObject> list = realmInstance.where(MyRealmObject.class).findAll();
}
});
java.lang.IllegalStateException:間違ったスレッドからレルムへのアクセス。 レルムオブジェクトは、彼らだけが
Iのイベントを作成したスレッド上でアクセスすることができ、私は無駄にsocket.ioのCONNECT
コール内でインスタンス化私のイベントの呼び出しのための別のインスタンスを作成してみました。
https://realm.io/docs/java/latest/#threadingを参照してください。 'call()'は 'realmInstance'が作成された場所とは別のスレッドで実行されています。そのスレッドの専用インスタンスを取得するには、呼び出しメソッドで 'getDefaultInstance()'を呼び出す必要があります。インスタンスを使用した後でインスタンスを閉じることを忘れないでください。 – beeender