android - 如何支持与 Azure 移动服务 Android 的一对多关系

标签 android one-to-many azure-mobile-services

我最近才开始使用 Azure 移动服务。我正在设置我的数据库。但是我不确定我将如何处理一对多/多对多关系。 Azure Mobile 没有开箱即用的支持,所以我不确定还能做什么。一种方法是仅将外键 ID 存储在特定实体中,然后对该表运行查询以获取与特定 ID 匹配的所有项目。我认为这可能有点太费时了。没有把握。关于如何做到这一点的任何建议或见解。 我是否必须求助于使用 JavaScript 在后端创建某种形式的逻辑来在服务器端创建实际关系?

最佳答案

使用 AMS for Android 支持一对多关系的一种方法是创建一个 ArrayList 并将外键/ID 存储在特定表中。该 ArrayList 然后包含您要检索的相关实体的 ID,因此您所要做的就是检索数组并提取 ID。 AWS 目前不支持 ArrayList 的序列化和反序列化,因此您是否必须编写自定义序列化程序来实现这一点。这可以通过使用 GSON 来完成。这是一个例子。

public class CollectionSerializer<E> implements JsonSerializer<Collection<E>>,
    JsonDeserializer<Collection<E>> {

public JsonElement serialize(Collection<E> collection, Type type,
                             JsonSerializationContext context) {
    JsonArray result = new JsonArray();
    for(E item : collection){
        result.add(context.serialize(item));

    }

    return new JsonPrimitive(result.toString());
}


@SuppressWarnings("unchecked")
public Collection deserialize(JsonElement element, Type type,
                              JsonDeserializationContext context) throws JsonParseException {
    JsonArray items = (JsonArray) new JsonParser().parse(element.getAsString());
    ParameterizedType deserializationCollection = ((ParameterizedType) type);
    Type collectionItemType = deserializationCollection.getActualTypeArguments()[0];
    Collection list = null;

    try {
        list = (Collection)((Class<?>) deserializationCollection.getRawType()).newInstance();
        for(JsonElement e : items){
            list.add((E)context.deserialize(e, collectionItemType));
        }
    } catch (InstantiationException e) {
        throw new JsonParseException(e);
    } catch (IllegalAccessException e) {
        throw new JsonParseException(e);
    }

    return list;
}
}

完成后,将其添加到您创建的 MobileServiceClient 实例中。

 mClient.registerSerializer(ArrayList.class,new CollectionSerializer<Object>());

关于android - 如何支持与 Azure 移动服务 Android 的一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18425789/

相关文章:

android - 无法从联系人列表中获取电话号码...内部代码

ios - 核心数据按最新消息对线程进行排序(对多关系排序)

java - 用于来 self 的 Android 应用程序的持久数据的 Azure 移动服务不起作用

java - 我应该如何将这个变量 E 传递给这个类?自定义序列化器 GSON

Android - loopj 异步任务取消

android - 在 Android 中从 Intent 引发时避免黑屏

android - 与 AppBarLayout 一起使用时 TabLayout 不可见?

java - 具有一对多和多对多关系的 JOOQ pojos

java - OneToMany 外键为空

c# - UWP 中的 Azure、Easy Tables、CRUD + 搜索操作