当前位置:网站首页>Jetpack使用异常问题集锦
Jetpack使用异常问题集锦
2022-08-11 05:28:00 【余生爱静】
livedata
1、问题
LiveData更新数据报错java.lang.IllegalStateException: Cannot invoke setValue on a background thread
解决方案:
setValue(T) 必须在主线程中调用 , 而 postValue(T) 既可以在主线程中调用, 也可以在子线程中调用。
viewmodel
1、在使用kotlin语言创建ViewModelFactory的时候,会抛出一下异常提示
解决方案:
在kotlinOptions中添加如下内容
kotlinOptions {
jvmTarget = '1.8'
freeCompilerArgs += [
"-Xjvm-default=all",
]
}
Hilt
在老项目中,按照官方文档加入相关依赖后,出现一下异常
官方文档
编译异常
解决方案:
1、增加下面的插件依赖
apply plugin: 'kotlin-android'
2、一定要把上面的插件依赖放在之前
//hilt
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
Preferences DataStore
public class PreferenceManager {
private RxDataStore<Preferences> dataStore;
private PreferenceManager() {
//配置dataStore
dataStore = new RxPreferenceDataStoreBuilder(AppGlobalUtils.getApplication(), /*name=*/ "settings").build();
}
private static class HOLDER {
private static PreferenceManager INSTANCE = new PreferenceManager();
}
public static PreferenceManager getInstance() {
return HOLDER.INSTANCE;
}
/**
* 保存int类型的数据
* @param key
* @param value
*/
public void putInt(String key, int value) {
dataStore.updateDataAsync(prefsIn -> {
MutablePreferences mutablePreferences = prefsIn.toMutablePreferences();
mutablePreferences.set(PreferencesKeys.intKey(key), value);
return Single.just(mutablePreferences);
});
}
/**
* 获取int类型的数据
* @param key
* @return
*/
public Flowable<Integer> getInt(String key) {
Preferences.Key<Integer> EXAMPLE_COUNTER = PreferencesKeys.intKey(key);
Flowable<Integer> exampleCounterFlow =
dataStore.data().map(prefs -> prefs.get(EXAMPLE_COUNTER));
return exampleCounterFlow;
}
}
问题:
当获取数据的时候,使用Flowable.subscribe(Subscriber<? super T> s)方法,在onNext(Integer integer)没有回调该方法。
PreferenceManager.getInstance().getInt(KEY)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Integer>() {
@Override
public void onSubscribe(Subscription s) {
}
@Override
public void onNext(Integer integer) {
Word word = new Word(String.valueOf(integer));
mWordViewModel.insert(word);
value++;
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
}
});
解决方式1(异步):
在onSubscribe(Subscription s) 回调中调用s.request(1)方法。
为什么一定要调用s.request()方法呢?结合源码注释来理解一下:
No events will be sent by a Publisher until demand is signaled via this method
在通过此方法发出需求信号之前,发布者不会发送任何事件。
解决方式2(异步):
调用subscribe(Consumer<? super T> onNext)
PreferenceManager.getInstance().getInt(KEY)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Word word = new Word(String.valueOf(integer));
mWordViewModel.insert(word);
value++;
}
});
解决方式3(同步):
调用blockingFirst()
Integer integer = PreferenceManager.getInstance().getInt(KEY).blockingFirst();
Word word = new Word(String.valueOf(integer));
mWordViewModel.insert(word);
value++;
边栏推荐
猜你喜欢
STM32学习笔记(白话文理解版)—按键控制
推出 Space Marketplace 测试版 | 新发布
Vscode远程连接服务器终端zsh+Oh-my-zsh + Powerlevel10 + Autosuggestions + Autojump + Syntax-highlighting
vscode插件开发——懒人专用markdown插件开发
STM32学习笔记(白话文理解版)—小灯的点亮、闪烁、呼吸
开源之夏 2022 火热来袭 | 欢迎报名 OpenMLDB 社区项目~
OpenMLDB v0.5.0 发布 | 性能、成本、灵活性再攀高峰
[Meetup]OpenMLDBxDolphinScheduler 链接特征工程与调度环节,打造端到端MLOps工作流
CVPR2022——Not All Points Are Equal : IA-SSD
STM32学习总结(二)——GPIO
随机推荐
Waymo dataset usage introduction (waymo-open-dataset)
华为云IOT平台设备获取api调用笔记
KANO模型——确定需求优先级的神器
IIC 和 SPI
使用ActiveReports制作第一张报表
js写四位随机数能有多少种可能性?并列出所有可能性
Diagnostic Log and Trace——为应用程序和上下文设置日志级别的方法
promise 改变状态的方法和promise 的then方法
Safety helmet identification system - escort for safe production
typescript学习日记,从基础到进阶(第二章)
活动预告 | 4月23日,多场OpenMLDB精彩分享来袭,不负周末好时光
华为IOT设备消息上报和消息下发验证
网络七层结构(讲人话)
物联网基础知识学习
【调试记录1】提高MC3172浮点运算能力,IQmath库的获取与导入使用教程
微信和抖音都到十亿级用户了,作为产品经理的你们觉得哪个产品更成功?
2021-09-11 C语言 变量与内存分配
第四范式OpenMLDB优化创新论文被国际数据库顶会VLDB录用
OpenMLDB v0.5.0 发布 | 性能、成本、灵活性再攀高峰
小程序技术原理分析