我有一个 Android 应用程序,其中代码库分为 2 个不同的模块:App和Domain
目标:我尝试在创建应用程序测试时使用 Hilt 提供的测试功能来替换域内部依赖项。
在Domain中,我有一个带有内部实现的内部接口,如下所示:
internal interface Database {
fun add(value: String)
}
internal class DatabaseImpl @Inject constructor() : Database {
override fun add(value: String) { ... }
}
Run Code Online (Sandbox Code Playgroud)
以上保证了数据库只能在Domain内部使用,不能从其他地方访问。
在Domain中,我有另一个接口(不是内部的),用于App,具有内部实现,如下所示:
interface LoginService {
fun userLogin(username: String, password: String)
}
internal class LoginServiceImpl @Inject constructor(database: Database) {
override fun userLogin(username: String, password: String) {
// Does something with the Database in …Run Code Online (Sandbox Code Playgroud) 我的问题是,在包含数组之前位于 NF 的表中,包含包含 UUID 数组的字段是否会破坏Normal Form ?
原表:
CREATE TABLE Floor
(
"Floor-ID" uuid NOT NULL,
"Floor-Floor" smallint NOT NULL,
"Floor-Desc" varchar(300),
CONSTRAINT "Floor-PK" PRIMARY KEY ("Floor-ID")
);
Run Code Online (Sandbox Code Playgroud)
新表,包括 UUID 数组:
CREATE TABLE Floor
(
"Floor-ID" uuid NOT NULL,
"Floor-Floor" smallint NOT NULL,
"Floor-Desc" varchar(300),
"Floor-Room-IDs" uuid[] NOT NULL,
CONSTRAINT "Floor-PK" PRIMARY KEY ("Floor-ID")
);
Run Code Online (Sandbox Code Playgroud)
包含 uuid[] 是否会破坏正常形式?
(理论上,相同的 UUID 可以存在于多行的多个 UUID 数组中。)
所以我对这个问题感到很疯狂.
重点如下:
我有一个Object实现Parcelable.这个对象Activities很容易在没有问题的情况下传递.
但是如果我尝试从Bundlein中读取它onRestoreInstanceState,在存储之后onSaveInstanceState,我得到一个关于转换为无效类的异常.下面是存储和读取的代码,以及Exception抛出的代码.
onSaveInstanceState
Log.d(TAG, "Address is null:" + (userAddress == null));
if( userAddress != null )
{
Log.d(TAG, "Address class:" + userAddress.getClass());
}
saveInto.putParcelable("UserAddress", userAddress); <-- Storing here
Run Code Online (Sandbox Code Playgroud)
onRestoreInstanceState
Log.d(TAG, "Contains: " + retrieveFrom.keySet().contains("UserAddress"));
userAddress = retrieveFrom.getParcelable("UserAddress"); <-- Reading here
Log.e(TAG, "Loaded-Address was null:" + (userAddress == null));
Run Code Online (Sandbox Code Playgroud)
Exception
W/Bundle? Key UserAddress expected Parcelable but value was a java.lang.String. The default value <null> was …Run Code Online (Sandbox Code Playgroud) android ×2
arrays ×1
dagger-hilt ×1
database ×1
java ×1
kotlin ×1
parcelable ×1
postgresql ×1
sql ×1
testing ×1