【问题标题】:Download selective data from DataStore based on sub id Amplify根据 sub id Amplify 从 DataStore 下载选择性数据
【发布时间】:2022-01-07 15:32:35
【问题描述】:

我只想根据用户子 ID 下载选择性数据,但 Amplify 允许我运行一次配置命令,selective syncing 用于此目的,我正在使用放大登录方法并获取 子 ID 从中,我只想根据该 sub id 获取数据,但我必须重新配置 Amplify 以便基于该 sub 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") },
    {}
)

【问题讨论】:

    标签: android aws-amplify datastore amplify aws-amplify-sdk-android


    【解决方案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 再次调用

    【讨论】:

    • 是的,你是对的
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 2015-04-02
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      相关资源
      最近更新 更多