Fix crash of sample (#1589)

Fixes #1580
diff --git a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt
index 763d74f..479e765 100644
--- a/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt
+++ b/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt
@@ -14,13 +14,7 @@
 import com.airbnb.lottie.samples.views.lottiefilesTabBar
 import com.airbnb.lottie.samples.views.marquee
 import com.airbnb.lottie.samples.views.searchInputItemView
-import com.airbnb.mvrx.BaseMvRxFragment
-import com.airbnb.mvrx.MvRxState
-import com.airbnb.mvrx.MvRxViewModelFactory
-import com.airbnb.mvrx.ViewModelContext
-import com.airbnb.mvrx.fragmentViewModel
-import com.airbnb.mvrx.withState
-import io.reactivex.schedulers.Schedulers
+import com.airbnb.mvrx.*
 import kotlinx.android.synthetic.main.fragment_epoxy_recycler_view.*
 import kotlin.properties.Delegates
 
@@ -70,16 +64,26 @@
             callback.onResult(emptyList(), null, null)
             return
         }
-        when (mode) {
-            LottiefilesMode.Popular -> api.getPopular(1)
-            LottiefilesMode.Recent -> api.getRecent(1)
-            LottiefilesMode.Search -> api.search(query, 1)
+
+        try {
+            val response = when (mode) {
+                LottiefilesMode.Popular -> api.getPopular(1)
+                LottiefilesMode.Recent -> api.getRecent(1)
+                LottiefilesMode.Search -> api.search(query, 1)
+            }.blockingGet()
+
+            callback.onResult(
+                    response.data,
+                    0,
+                    response.total,
+                    null,
+                    2.takeIf {
+                        !response.nextPageUrl.isNullOrEmpty()
+                    }
+            )
+        } catch (e: Exception) {
+            callback.onError(e)
         }
-                .subscribeOn(Schedulers.io())
-                .subscribe(
-                        { d -> callback.onResult(d.data, 0, d.total, null, 2.takeIf { d.data.isNotEmpty() }) },
-                        { callback.onError(it) }
-                )
     }
 
     override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, AnimationData>) {
@@ -87,20 +91,27 @@
     }
 
     override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, AnimationData>) {
-        loadPage(params.key, callback)
+        // ignored, prepend will never happen.
     }
 
     private fun loadPage(page: Int, callback: LoadCallback<Int, AnimationData>) {
-        when (mode) {
-            LottiefilesMode.Popular -> api.getPopular(page)
-            LottiefilesMode.Recent -> api.getRecent(page)
-            LottiefilesMode.Search -> api.search(query, page)
+        try {
+            val response = when (mode) {
+                LottiefilesMode.Popular -> api.getPopular(page)
+                LottiefilesMode.Recent -> api.getRecent(page)
+                LottiefilesMode.Search -> api.search(query, page)
+            }.blockingGet()
+
+            callback.onResult(
+                    response.data,
+                    (page + 1).takeIf {
+                        !response.nextPageUrl.isNullOrEmpty()
+                    }
+            )
+
+        } catch (e: Exception) {
+            callback.onError(e)
         }
-                .subscribeOn(Schedulers.io())
-                .subscribe(
-                        { callback.onResult(it.data, page + 1) },
-                        { callback.onError(it) }
-                )
     }
 }