Tag: android livedata

房间:Dao的LiveData将在每次更新时触发Observer.onChanged,即使LiveData值没有变化

我发现Dao返回的LiveData将在DB更新行时调用其观察者,即使LiveData值显然没有改变。 考虑下面的例子: 示例实体 @Entity public class User { public long id; public String name; // example for other variables public Date lastActiveDateTime; } 例如道 @Dao public interface UserDao { // I am only interested in the user name @Query(“SELECT name From User”) LiveData<List> getAllNamesOfUser(); @Update(onConflict = OnConflictStrategy.REPLACE) void updateUser(User user); } 在后台线程的某处 UserDao userDao = […]

Android架构组件LiveData

我正在尝试使用架构组件来实现一个简单的应用程序。 我可以使用Retrofit2从RestApi服务获取信息。 我可以在各自的Recyclerview中显示信息,当我旋转手机时,一切都按照原样进行。 现在我想过滤一个新types的对象(通过字符串) 有人可以用ViewModel指导我一点,我不知道最好的做法是什么…我正在使用MVVM … 这是我的ViewModel: public class ListItemViewModel extends ViewModel { private MediatorLiveData mList; private MeliRepository meliRepository; /* Empty Contructor. * To have a ViewModel class with non-empty constructor, * I have to create a Factory class which would create instance of you ViewModel and * that Factory class has to implement ViewModelProvider.Factory […]

MutableLiveData:在Retrofit / Moshi中分配给ArrayList的问题

我正在用一个Retrofit HTTP调用来调试一个问题。 正在进行的调用是成功的,并且响应似乎与我的POJO(在这种情况下为Kotlin数据类)格式相同。 然而,在将我的POJO列表分配给Response>时似乎有一些脱节。 没有错误,而且我已经证实,答复实际上并不是错误的。 我在这里错过了什么? 你会如何去find我的MutableLiveData和我的响应之间的断开? 发生断开连接的ViewModel。 调用enqueueProjectAPICall()之后,尽管响应是项目列表,但_projects仍然为空: class ProjectBrowserViewModel(): ViewModel(){ private var projectCall: Call private val API_KEY = “whatever” //Mutable private data private val _projects = MutableLiveData<List>() private val _selectedField = MutableLiveData() //Exposed Data val projects: LiveData<List> get() = _projects val selectedField: LiveData get()=_selectedField init { projectCall = BehanceAPI.behanceService.projects(API_KEY) } fun loadProjectsFromField(fieldName: String){ […]

LiveData观察器不会在回调中触发

当发送回调时,LiveData观察器不会触发。 但是,如果我把可观察的数据放在一个函数中,并且改变数据,它就可以正常工作。 请任何想法是什么? fun connect(address: String){ protocolARC.value = ProtocolARC() //OKAY!!!! bleManager.gattClient.onCreate(getApplication(), address, object : GattClient.OnCounterReadListener { override fun onCounterRead(value: Int) { Log.d("HURRAY", "read") protocolARC.value = ProtocolARC() //NOT OKAY????? } override fun onConnected(success: Boolean) { stopScan() } }) }

在使用Dagger,Room和LiveData时调试DataBinding错误

在我的Android项目中,我使用Android Studio 3.0-beta6,restofit2进行其余调用,Room进行持久化,LiveData进行反应式编程,使用RxJava / RxAndroid。 有几个注释处理器在使用中: android.arch.lifecycle:编译 android.arch.persistence.room:compiler com.google.dagger:匕首编译 com.google.dagger:匕首机器人处理器 org.projectlombok:龙目岛 每当我添加一个新的Retrofit2服务,使用Room注解来模拟类,Room Dao类时,我发现我遇到了一个数据绑定代错误: Error:(3, 27) error: cannot find symbol class DataBindingComponent 一个巨大的“找不到符号”错误的列表已被排除,但我的问题的根本原因往往不是放射。 调试根本原因需要很长时间,因为错误报告似乎非常弱。 在被烧了几次之后,在这种情况下,我使用了一些策略来隔离问题: 搁置我的更改,并以小增量引入更改,并在吹走我的应用程序的构建和模式输出文件夹后,执行干净的重建。 通常这意味着首先引入模型类的变化。 接下来介绍房间需要的Jackson转换器,以便在房间实体模型类中保留非原始类型。 最后介绍了Dao类和Room数据库子类。 检查实体类以确保它们具有@PrimaryKey,@Entity,@TypeConverters Room注释。 确保TypeConverter类指定了转换器类FooConverter,而不是正在转换的类Foo 检查Dao类以确保@Query注释中的tablename中没有复制粘贴错误 但是,有时候我仍然遇到数据生成错误,根本原因是未知的。 我想知道是否有任何好的技术来隔离这个问题的根本原因。 是否有方法打开注释处理器(特别是Room)中的调试日志记录。 TIA对此有任何指导。 我怀疑很多人都面临这种情况。

我如何使用视图模型,用sqlite和广播接收器来更新UI?

我有一个用于测试连接的应用程序,它有一个20分钟的警报,并且必须使用唯一代码联系服务器,并且服务器使用相同的代码发送一个短信来确认。 我有所有的组件工作,但我不知道如何得到唯一的代码来自动更新在用户界面。 警报把每个请求写入一个sqlite数据库,我希望用observable自动更新UI。 如果这有什么不同,我的项目在Kotlin。 基本上,我只是没有搞清楚如何“观察”的SQL数据库的变化,或如何让广播接收机和活动使用相同的可观察

首次更新后,Android LiveData Observer无效

我正在尝试使用Kotlin来实现架构组件的实时数据的基本实现: class MarketFragment : LifecycleFragment(){ …… override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel=ViewModelProviders.of(this).get(MarketViewModel::class.java) viewModel.book?.observe(this, Observer { book-> //updateUI }) …. 我的ViewModel类是这样创建的: class MarketViewModel : ViewModel() { var book: MutableLiveData<Book>? =MutableLiveData() var repository: Repository?= Repository() init { update("parameter") } fun update(s: String) { book=repository?.getBook(s) } } 和我的库: fun getBook(bookSymbol:String):MutableLiveData<Book> { val book=MutableLiveData<Book>() …… call . enqueue […]

Robolectric测试和LiveData

为了得到Kotlin,LiveData和Robolectric的一切,我得到了一个简单的启动画面的活动。 它在运行应用程序时正常工作,但在测试中无法正常工作。 这就像现场数据的回调从未触发或如果没有注册它的话。 这是测试: @Test fun should_redirect_to_login_when_time_is_up_after_onStart() { val timeUp = MutableLiveData<Boolean>() kodein.addConfig { bind<SplashViewModel>(overrides = true) with factory { _: BaseActivity -> mock<SplashViewModel> { on { isTimeUp() } doReturn timeUp } } } val activity = Robolectric.buildActivity(SplashActivity::class.java).create().start().resume().get() timeUp.value = true val startedIntent = shadowOf(activity).nextStartedActivity assertThat(startedIntent).isNotNull assertThat(startedIntent).hasComponent(application.packageName, LoginActivity::class.java) } 活动: class SplashActivity : JapetActivity() { […]

MutableLiveData与Kotlin多重打样器通用不工作

Android MutableLiveData与Kotlin多重打样器通用不工作 //ErrorInfo data class data class ErrorInfo<T>( var common: StatusCode?, var individual: T?, var message: String? ) //use val error: MutableLiveData<ErrorInfo<LoginRepo.LoginError>> 这么多类型的错误输出。 エラー:がありません – 找不到指标 エラー:无效なメソッド宣言です。戻り値の型が必要です。 – 无效的方法,需要返回类型 エラー:';'がありません – 未找到; エラー:シンボルを见つけられません – 找不到符号 エラー:型引数の数が不正确.1个必须です – 错误的参数计数。 需要一个。 对不起日本错误信息。 和 java.lang.IllegalStateException:无法分析:org.jetbrains.kotlin.kapt3.diagnostic.KaptError:批注处理时出错

Kotlin的可玩性和LiveData

我想用Kotlin使用LiveData,并且值不应该为null。 你怎么处理这个? 也许是一个LiveData的包装? 在这里寻找好的模式..举个例子: class NetworkDefinitionProvider : MutableLiveData<NetworkDefinition>() { val allDefinitions = mutableListOf(RinkebyNetworkDefinition(), MainnetNetworkDefinition(), RopstenNetworkDefinition()) init { value = allDefinitions.first() } fun setCurrent(value: NetworkDefinition) { setValue(value) } } 我知道在访问时价值不会是空的 – 但我总是要检查null或者有这些丑陋的东西。