小编isu*_*hes的帖子

如何为测试创建对象的PagedList?

我一直在与谷歌的拱库一起工作,但是让测试变得困难的一件事就是合作PagedList.

对于此示例,我使用存储库模式并从API或网络返回详细信息.

所以在ViewModel中我调用了这个接口方法:

override fun getFoos(): Observable<PagedList<Foo>>
Run Code Online (Sandbox Code Playgroud)

然后,存储库将RxPagedListBuilder用于创建Observable类型为PagedList的类型:

 override fun getFoos(): Observable<PagedList<Foo>> =
            RxPagedListBuilder(database.fooDao().selectAll(), PAGED_LIST_CONFIG).buildObservable()
Run Code Online (Sandbox Code Playgroud)

我希望能够通过这些返回a的方法设置返回测试PagedList<Foo>.类似的东西

when(repository.getFoos()).thenReturn(Observable.just(TEST_PAGED_LIST_OF_FOOS)
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 这可能吗?
  2. 我该如何创建PagedList<Foo>?

我的目标是以更加端到端的方式进行验证(例如确保在屏幕上显示正确的Foos列表).片段/活动/视图是PagedList<Foo>从ViewModel 观察的片段/活动/视图.

android android-architecture-components android-paging

14
推荐指数
3
解决办法
2591
查看次数

RxJava2/Retrofit2 - 为204 PUT和DELETE请求处理null

因此,我正在使用一个明确定义的API,旨在不返回有效负载主体DELETE和PUT操作.

这在Rx 0.X和Rx 1.x中是可接受的.现在我正在更新到Rx 2并且存在一个存在的危机,我应该如何处理空值.内容长度和正文当然是null,导致:

java.lang.NullPointerException: Null is not a valid element
   at io.reactivex.internal.queue.SpscLinkedArrayQueue.offer(SpscLinkedArrayQueue.java:68)
   at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.onNext(ObservableObserveOn.java:116)
   at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:63)
Run Code Online (Sandbox Code Playgroud)

在doOnNext中.

我见过很多人的建议Optional<>但是我也需要支持Java7以用于用例原因.我尝试了后端移植,但我无法让它工作.我也不想膨胀并为他们的版本导入Guava库.

我也注意到flatMap也可以帮我处理这个与地图相反的问题,而我正在阅读这些差异.

目前我有一个非常粗糙的OkHttp3拦截器,它将检查状态,检查有效负载是否为空,并添加错误的虚拟内容.

我也试过添加转换工厂.

任何人都可以提供建议并指导我正确的道路是什么?当然,API可以改变,但204不应该因为它的定义为HTTP状态代码而具有有效载荷.

相关依赖

compile('com.squareup.retrofit2:retrofit:2.1.0') {
     exclude module: 'okhttp'
} 
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
compile 'com.squareup.okhttp3:okhttp:3.5.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'

compile 'io.reactivex.rxjava2:rxjava:2.0.5'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.trello.rxlifecycle2:rxlifecycle:2.0.1'
compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.0.1'
Run Code Online (Sandbox Code Playgroud)

rx-java retrofit2 okhttp3

12
推荐指数
2
解决办法
5223
查看次数

Basic ConstraintLayout(工具栏,片段容器和底部导航)

我正在适应Android的Kotlin和ConstraintLayouts.我正在尝试使用具有工具栏和底部导航视图的简单布局.

这是我当前的xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimaryDark"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name"
            android:textColor="@android:color/white"
            android:textSize="@dimen/toolbar_title_text_size"
            android:textStyle="bold" />

    </android.support.v7.widget.Toolbar>

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolbar"
        app:layout_constraintBottom_toTopOf="@id/bottom_navigation_view"/>

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_navigation_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:menu="@menu/menu_main" />

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

不幸的是,我误解了一些东西,似乎无法让片段容器填满工具栏和底部导航之间的空间.

有人能引导我朝正确的方向前进吗?

android android-layout android-constraintlayout

3
推荐指数
1
解决办法
5061
查看次数

Android:抽象自定义视图和常见布局膨胀

因此,我做了一些研究,似乎在init抽象基类的/构造函数中查看膨胀并不是真正的最佳实践。我明白这是因为基类初始值设定项发生在init派生类的 /构造函数之前。由于抽象类是非最终类,所以有一个关于块this中泄漏的不错的 IDE 消息init。

这就是我所追求的:

abstract class Foo @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {

    private val myView: View

    init {
        // todo@patches fix leaking "this"
        View.inflate(context, R.layout.view_foo, this)
        myView = requireNotNull(findViewById(R.id.my_view))
    }
}
Run Code Online (Sandbox Code Playgroud)
class Bar @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0
) : Foo(context, attrs, defStyleAttr) 
Run Code Online (Sandbox Code Playgroud)

我真的不想向派生类的 init 添加任何内容,或者创建myView稍后在抽象类中设置的可为空/可变变量。

还有其他人觉得这有点令人沮丧或有什么建议吗?似乎想要从基类膨胀相同的布局并不罕见。

android android-custom-view android-view kotlin

2
推荐指数
1
解决办法
1108
查看次数