gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:05:58 26 4
gpt4 key购买 nike

我最近才开始使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com