0

我只想根据用户子 ID 下载选择性数据,但 Amplify 允许我运行一次配置命令,选择性同步用于此目的,我正在使用放大登录方法并从中获取子 ID,我只想根据该子 ID获取数据,但我必须重新配置 Amplify,以便将基于该子 ID,但对于 Amplify Auth 服务,Amplify 已配置,我无法添加基于子 ID 的配置

这是我在应用程序类中使用的代码

/* Add the Amplify Plugins */
Amplify.addPlugin(AWSApiPlugin())
Amplify.addPlugin(AWSCognitoAuthPlugin())

Amplify.addPlugin(AWSDataStorePlugin.builder().dataStoreConfiguration(
    DataStoreConfiguration.builder()
        .syncExpression(Rooms::class.java) { Devices.SUB.ge(AwsConstants.AMPLIFY_SUB_ID) }
        .syncExpression(Scenes::class.java) { Devices.SUB.ge(AwsConstants.AMPLIFY_SUB_ID) }
        .syncExpression(Devices::class.java) { Devices.SUB.ge(AwsConstants.AMPLIFY_SUB_ID) }
        .syncExpression(Automations::class.java) { Devices.SUB.ge(AwsConstants.AMPLIFY_SUB_ID) }
        .syncExpression(MasterNodes::class.java) { Devices.SUB.ge(AwsConstants.AMPLIFY_SUB_ID) }
        .build()
).build())

Amplify.configure(applicationContext)

我只想在准备好数据之前添加配置以下载选择性数据

/* Starting the DataStore Syncing */
Amplify.DataStore.start(
    { Log.i(Constants.TAG_AMPLIFY, "DataStore started") },
    {}
)
4

2 回答 2

1

我遇到了同样的问题。这是解决这个问题的关键概念。

虽然 Amplify.configure() 被调用一次,但每次你启动数据存储时,你的 syncExpression 函数都会被重新评估

因此,全局设置子 ID(比如说 shred pref)并启动数据存储。

例如,

 Amplify.addPlugin(AWSDataStorePlugin.builder().dataStoreConfiguration(
                    DataStoreConfiguration.builder()
                            .syncExpression(Chef.class, () -> Chef.EMAIL.eq(getmailid("Chef")))
                            .syncExpression(Order.class, () -> Order.EMAIL.eq(getmailid("Order")))
                            .syncExpression(OrderDishes.class, () -> OrderDishes.EMAIL.eq(getmailid("OrderDishes")))
                            .syncExpression(Dish.class, () -> Dish.EMAIL.eq(getmailid("Dish")).or(isCustomer()))
                           // .syncExpression(Dish.class, () -> (isCustomer()))
                            .build())
                    .build());

此处邮件 ID 稍后设置,然后在数据存储启动时再次调用getmailid

于 2022-01-06T20:28:08.487 回答
0

所以在挣扎之后,我发现每当我们调用Amplify.DataStore.start()方法时都会重新评估syncExpression,所以在这种情况下我们需要做的是我们必须使用所需的syncExpressions设置一次配置,所以无论何时我们调用 DataStore.start 它只是重新评估表达式,在调用 start 方法之前,我们只需要更新我们在 syncExpression 中使用的变量,所以在我们的例子中它是AwsConstants.AMPLIFY_SUB_ID

于 2022-01-07T07:32:35.717 回答