RxJava
robolectric
RxJava | robolectric | |
---|---|---|
15 | 8 | |
47,659 | 5,797 | |
0.1% | 0.2% | |
8.4 | 9.8 | |
about 18 hours ago | about 13 hours ago | |
Java | Java | |
Apache License 2.0 | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
RxJava
-
Humble Chronicles: Managing State with Signals
Is this similar RxJava, the reactive extensions library for https://github.com/ReactiveX/RxJava ? I have made that work in Clojure in production.
-
How to do threading in Android.
Since you mentioned java, there is RxJava and RxAndroid. Google general recommendation now is to use kotlin coroutines if you're considering writing your app with that.
-
It hurts
It's very quick though. In terms of the correctness of the syntax, I've never seen an issue while translating a single file or a single function. When I took the entire RxJava code base 5 years ago, right clicked on the source folder and converted to Kotlin, I found lots of problems. File by file I've never seen any issues though, but I also haven't done it much.
-
must known frameworks/libs/tech, every senior java developer must know(?)
You all beat me to MapStruct and Testcontainers. Honorable mention to RxJava, which I use in Desktop apps.
-
What is your tech stack?
RxJava with RxRelay (and rx-combinetuple-kt)
-
Best libraries for Android Developers
RxJava2
-
Reactive Data Streams - quick rxJava Summary
More information about rxJava, check it out here: (HERE)[https://github.com/ReactiveX/RxJava]
-
What are the most common used (3rd party) libraries and frameworks used in Android development?
Concurrency: Kotlin coroutines for general use, Rx or Flow for reactive programming (you can technically use Rx for regular concurrency as well, but not really what it's meant for)
-
Notification when item add to a ListView
If you're just looking at making a service call on a regular interval and notifying the user when there's an actual change in data, you can also look into RxJava https://github.com/ReactiveX/RxJava. From here you can "subscribe" to your service call, and then every time you make your service call you can have it look for changes compared to the previous emission .distinctUntilChanged() and then only notify it's subscribers when it notices an actual change. From there you can trigger a local notification and push to a LiveData (assuming MVVM) or otherwise update the UI to match as well.
-
Crash on update
``` io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.lang.IllegalStateException: Migration didn't properly handle: feed_group(org.schabi.newpipe.database.feed.model.FeedGroupEntity). Expected: TableInfo{name='feed_group', columns={name=Column{name='name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, uid=Column{name='uid', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, icon_id=Column{name='icon_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, sort_order=Column{name='sort_order', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_feed_group_sort_order', unique=false, columns=[sort_order]}]} Found: TableInfo{name='feed_group', columns={uid=Column{name='uid', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, name=Column{name='name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, icon_id=Column{name='icon_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, sort_order=Column{name='sort_order', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='0'}}, foreignKeys=[], indices=[]} at io.reactivex.rxjava3.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:717) at io.reactivex.rxjava3.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:714) at io.reactivex.rxjava3.internal.subscribers.LambdaSubscriber.onError(LambdaSubscriber.java:79) at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.checkTerminated(FlowableObserveOn.java:209) at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:394) at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176) at io.reactivex.rxjava3.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:123) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7665) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:594) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: java.lang.IllegalStateException: Migration didn't properly handle: feed_group(org.schabi.newpipe.database.feed.model.FeedGroupEntity). Expected: TableInfo{name='feed_group', columns={name=Column{name='name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, uid=Column{name='uid', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, icon_id=Column{name='icon_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, sort_order=Column{name='sort_order', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}}, foreignKeys=[], indices=[Index{name='index_feed_group_sort_order', unique=false, columns=[sort_order]}]} Found: TableInfo{name='feed_group', columns={uid=Column{name='uid', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, name=Column{name='name', type='TEXT', affinity='2', notNull=true, primaryKeyPosition=0, defaultValue='null'}, icon_id=Column{name='icon_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}, sort_order=Column{name='sort_order', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='0'}}, foreignKeys=[], indices=[]} at androidx.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:103) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onUpgrade(FrameworkSQLiteOpenHelper.java:177) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:416) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:316) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:145) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:106) at androidx.room.RoomDatabase.inTransaction(RoomDatabase.java:622) at androidx.room.RoomDatabase.assertNotSuspendingTransaction(RoomDatabase.java:399) at androidx.room.RoomDatabase.query(RoomDatabase.java:442) at androidx.room.util.DBUtil.query(DBUtil.java:83) at org.schabi.newpipe.database.feed.dao.FeedDAO_Impl$7.call(FeedDAO_Impl.java:285) at org.schabi.newpipe.database.feed.dao.FeedDAO_Impl$7.call(FeedDAO_Impl.java:282) at io.reactivex.rxjava3.internal.operators.maybe.MaybeFromCallable.subscribeActual(MaybeFromCallable.java:47) at io.reactivex.rxjava3.core.Maybe.subscribe(Maybe.java:5330) at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMapMaybe$FlatMapMaybeSubscriber.onNext(FlowableFlatMapMaybe.java:131) at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:402) at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176) at io.reactivex.rxjava3.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:322) at io.reactivex.rxjava3.internal.schedulers.ExecutorScheduler$ExecutorWorker.runEager(ExecutorScheduler.java:287) at io.reactivex.rxjava3.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:248) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923)
robolectric
-
Best libraries for Android Developers
Robolectric
-
What should the View layer be responsible for in Android?
Do you use Robolectric to test string resolving?
-
Testing Jetpack Compose with Robolectric
@Config(instrumentedPackages = ["androidx.loader.content"]) is a workaround for https://github.com/robolectric/robolectric/issues/6593
-
Testing Jetpack Compose without emulator or device
There is also an issue with Robolectric which can be worked around by adding @Config(instrumentedPackages = ["androidx.loader.content"]) annotation to the test class.
-
Trouble with room migrations
If it's failing only on robo, this might be the cause: https://github.com/robolectric/robolectric/issues/6411
-
How else do you test your apps, apart from Unit Testing?
Unit tests. ~X0,000. These run on the jvm (not Android), via http://robolectric.org/
-
Where do you write the test class in your classes that need context?
Take a look at http://robolectric.org. It has a specific JUnitRunner class for running unit tests in the test package with shadow classes for Android objects like application context. It is broadly used and there are a lot of examples on github and robolectric provides several themselves
- Robolectric 4.5 Beta 1 is now available
What are some alternatives?
Mutiny - An Intuitive Event-Driven Reactive Programming Library for Java
JUnit - A programmer-oriented testing framework for Java.
Reactor
PowerMock - PowerMock is a Java framework that allows you to unit test code normally regarded as untestable.
Vert.x - Vert.x is a tool-kit for building reactive applications on the JVM
robotium - Android UI Testing
EventBus - Event bus for Android and Java that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality.
robolectric - Android Unit Testing Framework
Reactive Streams - Reactive Streams Specification for the JVM
LiveData Testing - TestObserver to easily test LiveData and make assertions on them.
RxAndroid - RxJava bindings for Android
selendroid - "Selenium for Android" (Test automate native or hybrid Android apps and the mobile web with Selendroid.) Join us on IRC #selendroid on freenode. Also confirm you have signed the CLA http://goo.gl/pAvxEI when making a Pull Request.