我需要将我的 Android 移动应用程序与云中的多租户数据库同步。我认为最好的方法是使用 UUID 作为我的表的主键。我刚开始使用 Room 并想知道我在哪里/如何做到这一点,并正在寻找 1) 关于使用 UUID 作为与 Room 的 PK 的意见和 2) 我将在何处实现这一点(在初始化 id 列的模型中,因为这是使用@NonNull 的唯一方法)?
更新
我使用了 INT,但我不相信这是正确的方法。我在 android 开发者网站上看到了一个例子,它显示了正在使用的 uuid。当然会帮助我的云同步例程,但以速度和空间为代价。我正在考虑一种混合方法,其中 INT 用于 PK,而 UUID 作为附加字段。这样我就不必为 FK 复制每个 UUID。我做了一些建模,看起来混合方法将是完整 UUID 方法大小的 50%(INT 只有 25%)。
有没有人在同样的问题上挣扎过?您是否选择了一个方向(UUID、INT 或混合)并且您对此感到后悔还是做得很好?
我使用以下方法将矢量资源添加到了 Wear os 项目中,但无法使用以下方式访问它:
ContextCompat.getDrawable(mContext,R.drawable.ic_settings);
Run Code Online (Sandbox Code Playgroud)
它似乎没有找到该资产。我有 Drawable 目录并查看其中的资源。我打开xml文件,出现错误:
“drawable 中的可绘制‘ic_settings’在基本可绘制文件夹或可绘制密度dpi 文件夹中没有声明;当在与此限定符不匹配的配置中查询可绘制时,这可能会导致崩溃”
我不懂这啥意思。我刚刚使用“新建”->“矢量资源”菜单添加了它。有人知道如何解决这个问题吗?
此外,我在drawable目录中有一个roundbutton.xml,它在另一段代码中由R.drawable引用,并且没有错误。
更新
完成所有检查后(是可绘制目录中的资产),我关闭并重新启动 Android Studio,它识别了它们。重新启动吧。感谢大家的回复。我将选择最有帮助的一个作为答案。
我正在尝试将版本控制 (Microsoft.AspNet.WebApi.Versioning) 与 dotnet 5 一起用于 webapi 项目。我已经添加了 nuget 包,但出现以下错误:
“IServiceCollection”不包含“AddApiVersioning”的定义,并且找不到接受“IServiceCollection”类型的第一个参数的可访问扩展方法“AddApiVersioning”(您是否缺少 using 指令或程序集引用?)
在这一行:
services.AddApiVersioning();
Run Code Online (Sandbox Code Playgroud)
在我的 Startup.cs 中
我的 .csproj 文件如下所示:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Identity.Web" Version="1.0.0"/>
<PackageReference Include="Microsoft.Identity.Web.UI" Version="1.0.0"/>
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3"/>
<PackageReference Include="Microsoft.Data.SqlClient" Version="2.0.1"/>
<PackageReference Include="Dapper" Version="2.0.35"/>
<PackageReference Include="Azure.Storage.Blobs" Version="12.4.1"/>
<PackageReference Include="Microsoft.AspNet.WebApi.Versioning" Version="4.1.1"/>
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
我尝试遵循一些示例,例如这个、这个和这个,我应该有以下“使用指令”,我有:
using Microsoft.AspNetCore.Mvc;
Run Code Online (Sandbox Code Playgroud)
有人面临同样的挑战吗?.net 5 是否支持版本控制?
I am trying to follow a few code examples to pull a single record from the database to display, because it seems somewhat complicated to do so with LiveData. However, I am getting an error in the IDE.
无法解析符号“AndroidSchedulers”
在线上:
AndroidSchedulers.mainThread()
Run Code Online (Sandbox Code Playgroud)
在这次通话中:
viewModel.getScenario(scenarioId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableSingleObserver<Scenario>() {
@Override
public void onSuccess(Scenario scenario) {
}
});
Run Code Online (Sandbox Code Playgroud)
我的年级是这样的:
implementation 'androidx.room:room-rxjava2:2.1.0'
Run Code Online (Sandbox Code Playgroud) 这听起来微不足道,但我面临挑战。我无法将可为空值转换为不可为空值:
if (caseObj.SyncDate != null)
caseDTO.SyncDate = DateTimeHelper.getFormattedDateTime(caseObj.SyncDate);
Run Code Online (Sandbox Code Playgroud)
我的 caseObj.SyncDate 定义为:
public DateTimeOffset? SyncDate {get;set;}
Run Code Online (Sandbox Code Playgroud)
我的 getFormattedDateTime 是:
public static string getFormattedDateTime(DateTimeOffset dateTimeOffset) {
string returnDate = null;
if (dateTimeOffset != null) {
returnDate = dateTimeOffset.ToString("yyyy-MM-dd HH:mm:ss.fffzzz", CultureInfo.InvariantCulture);
}
return returnDate;
}
Run Code Online (Sandbox Code Playgroud)
我读过这篇文章并尝试过:
if (caseObj.SyncDate != null)
caseDTO.SyncDate = DateTimeHelper.getFormattedDateTime(caseObj.SyncDate!):
Run Code Online (Sandbox Code Playgroud)
这看起来很奇怪,因为我看到了Microsoft 文档的链接,其中指出:
有时,当您知道变量不为 null,但编译器确定其 null 状态为 Maybe-null 时,您必须覆盖警告。您使用了 null-forgiving 运算符!跟随变量名称以强制空状态为非空。例如,如果您知道 name 变量不为 null,但编译器发出警告,则可以编写以下代码来覆盖编译器的分析:
但这似乎不起作用。我已经阅读了这篇文章(我认为这篇文章足够集中),而这篇文章的标记解决方案不是从可为空转换为空。
我也尝试过这个:
if (caseObj.SyncDate != null) {
DateTimeOffset dto …Run Code Online (Sandbox Code Playgroud)