homayoonahmadi / RealTime

Reliable time library for Android. Initialize the current time using one of several time providers (like GPS, NTP, or a server's date header) and get current reliable time impervious to device clock changes by the user until the next device boot.
4 stars 1 forks source link

null pointer exception #1

Open paoloviafora opened 4 months ago

paoloviafora commented 4 months ago

hi, i am experiencing some null pointer exception using your code for tests.

Here the stack trace registered by crashlytics

Fatal Exception: java.lang.NullPointerException: Attempt to invoke interface method 'void com.android.okhttp.internal.http.HttpStream.writeRequestHeaders(com.android.okhttp.Request)' on a null object reference at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:606) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:475) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getHeaders(HttpURLConnectionImpl.java:167) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getHeaderFields(HttpURLConnectionImpl.java:227) at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getHeaderFields(DelegatingHttpsURLConnection.java:179) at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getHeaderFields(HttpsURLConnectionImpl.java:30) at ir.programmerplus.realtime.RealTime.fetchTimeServer(RealTime.java:380) at ir.programmerplus.realtime.RealTime.lambda$requestTimeServer$1(RealTime.java:345) at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44) at io.reactivex.Single.subscribe(Single.java:3394) at io.reactivex.internal.operators.single.SingleToFlowable.subscribeActual(SingleToFlowable.java:37) at io.reactivex.Flowable.subscribe(Flowable.java:14409) at io.reactivex.Flowable.subscribe(Flowable.java:14356) at io.reactivex.internal.operators.flowable.FlowableRepeatWhen$WhenReceiver.onNext(FlowableRepeatWhen.java:101) at io.reactivex.internal.operators.flowable.FlowableRetryWhen.subscribeActual(FlowableRetryWhen.java:62) at io.reactivex.Flowable.subscribe(Flowable.java:14409) at io.reactivex.internal.operators.flowable.FlowableSingleSingle.subscribeActual(FlowableSingleSingle.java:39) at io.reactivex.Single.subscribe(Single.java:3394) at io.reactivex.internal.operators.single.SingleDoOnDispose.subscribeActual(SingleDoOnDispose.java:38) at io.reactivex.Single.subscribe(Single.java:3394) at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579) 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:264) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012)

i'm using a initialization in a try/catch block but exception will be still raised try { RealTime.builder(this) // .withGpsProvider() .withNtpServer("time.nist.gov") .withNtpServer("time.google.com") .withNtpServer("time.windows.com") .withTimeServer("https://bing.com") .withTimeServer("https://google.com") .setLoggingEnabled(BuildConfig.DEBUG) // .setSyncBackoffDelay(60, TimeUnit.SECONDS) .build(date -> Log.d("REALTIME", "RealTime is initialized, current dateTime: " + date)); } catch (Exception e) {}

Thank you in advantance for reply!

Bye

homayoonahmadi commented 4 months ago

Hi @paoloviafora, which version are you using? please provide the SDK version of the target device I suggest you clone the sample project and run it to see if there is any problem in the library.