小编lcj*_*lcj的帖子

在 Android 上使用 Room 使用 UUID 作为主键

我需要将我的 Android 移动应用程序与云中的多租户数据库同步。我认为最好的方法是使用 UUID 作为我的表的主键。我刚开始使用 Room 并想知道我在哪里/如何做到这一点,并正在寻找 1) 关于使用 UUID 作为与 Room 的 PK 的意见和 2) 我将在何处实现这一点(在初始化 id 列的模型中,因为这是使用@NonNull 的唯一方法)?

更新

我使用了 INT,但我不相信这是正确的方法。我在 android 开发者网站上看到了一个例子,它显示了正在使用的 uuid。当然会帮助我的云同步例程,但以速度和空间为代价。我正在考虑一种混合方法,其中 INT 用于 PK,而 UUID 作为附加字段。这样我就不必为 FK 复制每个 UUID。我做了一些建模,看起来混合方法将是完整 UUID 方法大小的 50%(INT 只有 25%)。

有没有人在同样的问题上挣扎过?您是否选择了一个方向(UUID、INT 或混合)并且您对此感到后悔还是做得很好?

android android-room

7
推荐指数
1
解决办法
4117
查看次数

可绘制的“ic_settings”在基本可绘制文件夹中没有声明

我使用以下方法将矢量资源添加到了 Wear os 项目中,但无法使用以下方式访问它:

ContextCompat.getDrawable(mContext,R.drawable.ic_settings);
Run Code Online (Sandbox Code Playgroud)

它似乎没有找到该资产。我有 Drawable 目录并查看其中的资源。我打开xml文件,出现错误:

“drawable 中的可绘制‘ic_settings’在基本可绘制文件夹或可绘制密度dpi 文件夹中没有声明;当在与此限定符不匹配的配置中查询可绘制时,这可能会导致崩溃”

我不懂这啥意思。我刚刚使用“新建”->“矢量资源”菜单添加了它。有人知道如何解决这个问题吗?

这是代码中的行: 在此输入图像描述

这是它在 android studio 中的位置: 在此输入图像描述

当我查看文件时: 在此输入图像描述

此外,我在drawable目录中有一个roundbutton.xml,它在另一段代码中由R.drawable引用,并且没有错误。

更新

完成所有检查后(是可绘制目录中的资产),我关闭并重新启动 Android Studio,它识别了它们。重新启动吧。感谢大家的回复。我将选择最有帮助的一个作为答案。

android wear-os

6
推荐指数
2
解决办法
6453
查看次数

SwiftUI 使用带有输入/搜索按钮的可搜索修饰符

我想在 swiftui 中使用可搜索修饰符,但正在调用 webapi 并且不想对每个字符都这样做。我见过的大多数示例,例如这个这个都在每个字符(或可能是一定数量的字符)上搜索,但我只想在输入/搜索键上搜索。我还没有看到这样的例子。以前有人这样做过吗?

我是 SwiftUI 的新手,所以我可能缺少一个简单的答案。

swiftui

4
推荐指数
1
解决办法
1289
查看次数

对于 webapi vs 代码项目,“IServiceCollection”不包含使用 dot net 5 的“AddApiVersioning”定义

我正在尝试将版本控制 (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 是否支持版本控制?

.net .net-core asp.net-core-webapi aspnet-api-versioning

1
推荐指数
1
解决办法
5796
查看次数

Cannot resolve symbol 'AndroidSchedulers ' on AndroidSchedulers.mainThread() using implementation 'androidx.room:room-rxjava2:2.1.0'

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)

android rx-java android-room

0
推荐指数
1
解决办法
1158
查看次数

在 C#/dotnet 中将可空变量转换为不可空变量

这听起来微不足道,但我面临挑战。我无法将可为空值转换为不可为空值:

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)

c# .net-core

0
推荐指数
1
解决办法
6736
查看次数