TrueTimeRx не работает с ошибкой, запрашивающей время - PullRequest
0 голосов
/ 10 апреля 2019

Я использую TrueTimeRx для своего проекта Android Studio со следующим кодом:

public void TrueTimeFunction()
{
    TrueTimeRx.build()
            .withConnectionTimeout(31428)
            .withRetryCount(100)
            .withSharedPreferences(this)
            .withLoggingEnabled(true)
            .initializeRx("time.google.com")
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<Date>() {
                @Override
                public void accept(Date date) {
                    if (!TrueTimeRx.isInitialized()) {
                        Log.d(TAG, "Sorry TrueTime not yet initialized");
                        return;
                    }

                    Date trueTime = TrueTimeRx.now();
                    Log.d(TAG, "Date: " + trueTime);
                    //rr.child("hahalol").setValue("aa"+date.toString());
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(Throwable throwable) {
                    Log.d(TAG, "Error: ", throwable);
                }
            }, new Action() {
                @Override
                public void run() {
                    Log.d(TAG, "Completed!");
                }
            });

}

и вызываю функцию следующим образом:

TrueTimeFunction();
Date date = TrueTimeRx.now();

Я получил следующую ошибку:

E/TrueTimeRx: ---- Error requesting time
java.net.SocketTimeoutException
    at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:601)
    at libcore.io.IoBridge.recvfrom(IoBridge.java:559)
    at java.net.PlainDatagramSocketImpl.doRecv(PlainDatagramSocketImpl.java:163)
    at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:171)
    at java.net.DatagramSocket.receive(DatagramSocket.java:274)
    at com.instacart.library.truetime.SntpClient.requestTime(SntpClient.java:123)
    at com.instacart.library.truetime.TrueTime.requestTime(TrueTime.java:122)
    at com.instacart.library.truetime.TrueTimeRx$4$1$2.subscribe(TrueTimeRx.java:197)
    at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:72)
    at io.reactivex.Flowable.subscribe(Flowable.java:14349)
    at io.reactivex.Flowable.subscribe(Flowable.java:14295)
    at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:818)
 Caused by: android.system.ErrnoException: recvfrom failed: EAGAIN (Try again)
    at libcore.io.Posix.recvfromBytes(Native Method)
    at libcore.io.Posix.recvfrom(Posix.java:161)
    at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:250)
    at libcore.io.IoBridge.recvfrom(IoBridge.java:556)
    at java.net.PlainDatagramSocketImpl.doRecv(PlainDatagramSocketImpl.java:163) 
    at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:171) 
    at java.net.DatagramSocket.receive(DatagramSocket.java:274) 
    at com.instacart.library.truetime.SntpClient.requestTime(SntpClient.java:123) 
    at com.instacart.library.truetime.TrueTime.requestTime(TrueTime.java:122) 
    at com.instacart.library.truetime.TrueTimeRx$4$1$2.subscribe(TrueTimeRx.java:197) 
    at io.reactivex.internal.operators.flowable.FlowableCreate.subscribeActual(FlowableCreate.java:72) 
    at io.reactivex.Flowable.subscribe(Flowable.java:14349) 
    at io.reactivex.Flowable.subscribe(Flowable.java:14295) 
    at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82) 
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66) 
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
    at java.lang.Thread.run(Thread.java:818) 

Я пытался избежать использования функции, и я сделал это напрямую

TrueTimeRx.build()
                    .withConnectionTimeout(31428)
                    .withRetryCount(100)
                    .withSharedPreferences(Start.this)
                    .withLoggingEnabled(true)
                    .initializeRx("time.google.com")
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Consumer<Date>() {
                        @Override
                        public void accept(Date date) {
                            if (!TrueTimeRx.isInitialized()) {
                                Log.d(TAG, "Sorry TrueTime not yet initialized");
                                return;
                            }

                            Date trueTime = TrueTimeRx.now();
                            Log.d(TAG, "Date: " + trueTime);
                            //rr.child("hahalol").setValue("aa"+date.toString());
                        }
                    }, new Consumer<Throwable>() {
                        @Override
                        public void accept(Throwable throwable) {
                            Log.d(TAG, "Error: ", throwable);
                        }
                    }, new Action() {
                        @Override
                        public void run() {
                            Log.d(TAG, "Completed!");
                        }
                    });

        Date date = TrueTimeRx.now();

Я получаю эту ошибку:

 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.you.quiz, PID: 14749
java.lang.IllegalStateException: You need to call init() on TrueTime at least once.
    at com.instacart.library.truetime.TrueTime.now(TrueTime.java:29)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...