Android RxJava уведомляет, когда интернет меняет свое состояние

#java #android #rx-java

Вопрос:

Я хочу показывать текст журнала, когда Интернет переключается с подключенного на не подключенный и наоборот. И теперь есть два вопроса.

  1. Я думаю, что это не так правильно, как должно быть, потому что теперь он каждые несколько секунд проверяет соединение, а не просто уведомляет, когда эта логическая переменная действительно меняется.
  2. Более того, когда я нахожусь в автономном режиме, появляется такая ошибка (когда в сети — ошибки нет).:

    2021-07-20 18:29:51.872 22886-22903/pl.jawegiel.бесконечный удар E/Система: Неперехваченное исключение, созданное финализатором

    2021-07-20 18:29:51.872 22886-22903/pl.jawegiel.бесконечный удар E/Система: java.lang.Исключение NullPointerException: Нулевая ссылка, используемая для синхронизации (ввод монитора) в com.android.org.conscrypt.ConscryptFileDescriptorSocket.доработать(ConscryptFileDescriptorSocket.java:1091) на java.lang.Демоны$Финализердемон.Завершите(Демоны.java:250) на java.lang.Демоны$FinalizerDaemon.runInternal(Демоны.java:237) в java.lang.Демоны$Daemon.run(Демоны.java:103) в java.lang.Thread.run(поток.java:764)

Вот мой код.

ObservableInternetConnection.java :

 public class ObservableInternetConnection {

Subject<Boolean> mObservable = PublishSubject.create();

public void changeVariable(boolean b) {
    Boolean isInternetConnection = b;
    // notify the Observable that the value just change
    mObservable.onNext(isInternetConnection);
}

public void subscribeBoolInternetConn() {
    mObservable
            .subscribe(bool -> {
                if (bool)
                    Log.e("connection", "connection yes");
                else
                    Log.e("connection", "connection no");
            });
}
}
 

И с самого GameActivity.java начала, когда я что-то делаю с этим классом:

 (...)
    private final Handler handlerCheckInternet = new Handler();
    private final ObservableInternetConnection observableInternetConnection = new ObservableInternetConnection();
(...)

    @Override
protected void onStart() {
    super.onStart();

    observableInternetConnection.subscribeBoolInternetConn();
    handlerCheckInternet.postDelayed(new Runnable() {
        @Override
        public void run() {
            observableInternetConnection.changeVariable(Util.isInternetAvailable(GameActivity.this));
            handlerCheckInternet.postDelayed(this, 3000);
        }
    }, 3000);
}