2017-06-03 144 views
0

我正在构建一个Android应用程序,并且正在使用Google App Engine存储用户的数据。我希望用户能够从其他设备连接到他们的帐户,但我不知道如何。Google App Engine - 数据存储 - 获取实体,而不是按键

用户表(实物)有4个属性:id, email, nickname and levelenter image description here

我已阅读本: https://cloud.google.com/appengine/docs/standard/java/datastore/creating-entities

它是由他们的主要撰写他们,我只能得到实体,这是一个问题我,因为在新设备中,我只能获取用户的电子邮件,而不是密钥和ID。 我需要通过他们的电子邮件获得密钥和ID。

这可能吗? 如果不是,他们的任何其他解决方案?

回答

0

你只需要做一个简单的query。你在GAE后端使用什么语言?例如,在Python中,你会做这样的事情:

def get_user_by_prop(prop, value): 
    this_user = User.query(getattr(User, prop) == value).get() 
    return this_user 

从链路判断你的问题,我假设你使用的是Java?下面是文档的查询:https://cloud.google.com/appengine/docs/standard/java/datastore/retrieving-query-results

,他们使用示例:

Query q = 
    new Query("User") 
     .setFilter(new FilterPredicate("nickname", FilterOperator.EQUAL, "billybob")); 

PreparedQuery pq = datastore.prepare(q); 
Entity result = pq.asSingleEntity(); 
+0

非常感谢,正是我所需要的! –

1

什么是存储在id财产?它是否有一些有意义的价值或者只是用作唯一标识符的随机唯一号码?
看来你可以设计不同的数据库,所以电子邮件地址将是你唯一的标识符。在这种情况下,你将有一个User表包含以下属性:
email(您的唯一标识符)nicknamelevel
这样,你就可以使用下面的代码片段:无论是

Key userEmail; //Get user's email 
Entity user = datastore.get(userEmail); 

,您仍然可以访问您的实体,而无需实体的键,通过使用query。这样你就不会使用实体的键来获取它的实例,而是通过使用给定的属性值并找到具有该属性值的匹配实体来获得所需的实体。
该查询会看起来像这样:

String userEmail; //Get user's email 
Filter propertyFilter = 
    new FilterPredicate("email", FilterOperator.EQUAL, userEmail); 
Query q = new Query("User").setFilter(propertyFilter); 
PreparedQuery pq = datastore.prepare(q); 
try { 
    Entity user = pq.asSingleEntity() 
    //Same as Entity user = datastore.get(userEmail) mentioned above 

} catch (TooManyResultsException e) { 
    // If more than one result is returned from the Query. 
    // Add code for dealing the exception here 
} 
相关问题