这是我使用Room Persistence Library将数据插入数据库的方法:
实体:
@Entity
class User {
@PrimaryKey(autoGenerate = true)
public int id;
//...
}
Run Code Online (Sandbox Code Playgroud)
数据访问对象:
@Dao
public interface UserDao{
@Insert(onConflict = IGNORE)
void insertUser(User user);
//...
}
Run Code Online (Sandbox Code Playgroud)
在上述方法本身完成插入后,是否可以返回User的id而无需编写单独的select查询?
有没有更简单的方法来查看在Android Studio中使用Room Persistence Library创建的数据库的内容?
我在多个片段中有一个共享视图模型。
class MainFragment {
private val sharedViewModel: HomeActivityViewModel by activityViewModels()
}
class MagazinesFragment {
private val sharedViewModel: HomeActivityViewModel by activityViewModels()
}
Run Code Online (Sandbox Code Playgroud)
我在该共享视图模型中有一个事件。
class HomeActivityViewModel{
val userAuthStatusChanges = MutableLiveData<Boolean>()
}
Run Code Online (Sandbox Code Playgroud)
我正在多个片段中观察该事件。
class MainFragment {
//...
sharedViewModel.userAuthStatusChanges.observe(viewLifecycleOwner) {
// do smth
}
}
class MagazinesFragment {
//...
sharedViewModel.userAuthStatusChanges.observe(viewLifecycleOwner) {
// do smth
}
}
Run Code Online (Sandbox Code Playgroud)
每当该userAuthStatusChanges
事件发生时,我想在观察该事件的所有片段中触发单个实时事件。
如果我将事件设置为 MutableLiveData,则每当重新创建片段时都会观察到该事件。如果我使用SingleLiveEvent,则该事件仅被观察到一次并且仅在一个片段中被观察到。
我希望在所有片段中触发此事件,并且每个片段中仅触发一次。我正在使用导航组件。
当我使用1.0.0-alpha5版本的房间持久性库时,一切都运行正常.但是,在更新到1.0.0-alpha9版本后,我收到此错误:
java.lang.IllegalStateException:尝试重新打开已关闭的对象:SQLiteDatabase:/ data/data/package_name/databases/app_db
我怎么解决这个问题?
编辑:
我正在使用带有匕首2的MVP架构.我有DatabaseHelper类来初始化RoomDatabase:
@Singleton
public class DatabaseHelper {
private final AppDatabase appDatabase;
@Inject
public DatabaseHelper(@ApplicationContext Context context) {
appDatabase = Room.databaseBuilder(context, AppDatabase.class, "app_db").build();
}
public List<DifficultyEntity> getAllDifficulties() {
return appDatabase.difficultyDao().getAllDifficulties();
}
Run Code Online (Sandbox Code Playgroud)
我的RoomDatabase:
@Database(version = 22, entities = {
DifficultyEntity.class, // ....
})
@Singleton
public abstract class AppDatabase extends RoomDatabase {
public abstract DifficultyDao difficultyDao();
//....
}
Run Code Online (Sandbox Code Playgroud)
当我调用getAllDifficulties
方法时,我收到了这个错误.
这是logcat:
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/package_name/databases/app_db
at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1783)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1729)
at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.execSQL(FrameworkSQLiteDatabase.java:241) …
Run Code Online (Sandbox Code Playgroud) 有一个数据框,其中包含布尔值交替的列。我想根据这些布尔变化创建增量值系列。我只想在布尔值与之前的值不同时增加。我想在没有循环的情况下执行此操作。
例如,这是数据框:
column
0 True
1 True
2 False
3 False
4 False
5 True
Run Code Online (Sandbox Code Playgroud)
我想得到这个:
column inc
0 True 1
1 True 1
2 False 2
3 False 2
4 False 2
5 True 3
Run Code Online (Sandbox Code Playgroud) 是否可以在不传递参数的情况下使用 XML 中的默认参数调用 Kotlin 函数
这是我的视图模型:
class MyViewModel: ViewModel(){
fun doSomething(myVar: String = "defValue"){
}
}
Run Code Online (Sandbox Code Playgroud)
XML:
....
<data>
<variable
name="viewModel"
type="com.example.MyViewModel" />
</data>
....
android:onClick="@{(view) -> viewModel.doSomething()}" --> ERROR
android:onClick="@{(view) -> viewModel.doSomething(`SomeString`)}" --> WORKING
....
Run Code Online (Sandbox Code Playgroud)
当我使用数据绑定从 XML调用不带参数的doSomething
方法时,出现错误。
[databinding] {"msg":"cannot find method doSomething() in class com.example.MyViewModel","file":"app\\src\\main\\res\\layout\\fragment_list.xml","pos":[{"line0":56,"col0":41,"line1":56,"col1":65}]}
Run Code Online (Sandbox Code Playgroud) 我已将导航框架从 2.3.5 更新到 2.4.0-alpha01 版本。我将它与 Safe Args gradle 插件一起使用。更新后,我开始出现'getActionId' overrides nothing
错误'getArguments' overrides nothing
。
我认为发生这种情况是因为 Safe Args在生成 Direction 类时不正确地覆盖了actionId
和arguments
字段。NavDirections
例如,这是正在生成的内容:
public override fun getActionId(): Int =
R.id.action_navigation_articles_to_articleReaderFragment
Run Code Online (Sandbox Code Playgroud)
这是应该生成的:
public override val actionId: Int = R.id.action_navigation_articles_to_articleReaderFragment
Run Code Online (Sandbox Code Playgroud)
如何获得安全参数来生成正确的构建器类?
android android-navigation android-architecture-navigation android-safe-args
我需要在项目布局中使用一个单独的布尔变量,该变量打算用作的一行recyclerView
,以切换其中某些视图的状态。
我知道,我可以选择将布尔值包含在模型类中并使用它。我很好奇,是否有可能借助数据绑定库在布局内使用基本类型。
android ×7
android-room ×3
android-architecture-navigation ×1
android-mvvm ×1
android-xml ×1
kotlin ×1
mvvm ×1
numpy ×1
pandas ×1
python ×1
sqlite ×1