Android 对应用程序引擎数据存储中不可见的实体的更新

Android 对应用程序引擎数据存储中不可见的实体的更新,android,google-app-engine,Android,Google App Engine,当我在App Engine控制台的Datastore Viewer中手动更新我的一个实体时,我遇到了这个问题,我无法立即从使用我更新的数据的Android应用程序中看到更新。我知道有一个Memcache可以从中检索数据。 因此,我的问题是,是否可以删除我更新的实体的memchache,以便我的应用程序获得要显示的新数据?如果有的话,有人能告诉我怎么做吗 另外,我曾尝试通过管理控制台使用“Flush Memcache”,但没有任何帮助。我仍然得到“旧”实体 这就是我检索实体的方式。我使用JDO来持

当我在App Engine控制台的Datastore Viewer中手动更新我的一个实体时,我遇到了这个问题,我无法立即从使用我更新的数据的Android应用程序中看到更新。我知道有一个Memcache可以从中检索数据。 因此,我的问题是,是否可以删除我更新的实体的memchache,以便我的应用程序获得要显示的新数据?如果有的话,有人能告诉我怎么做吗

另外,我曾尝试通过管理控制台使用“Flush Memcache”,但没有任何帮助。我仍然得到“旧”实体

这就是我检索实体的方式。我使用JDO来持久化和查询数据。在我的数据访问器对象中,我得到了这个方法,它返回所有作业并将其转换为JSONArray。最后,这个JSONArray被传递到我的移动应用程序中,不幸的是,其中包含了“旧”数据

public JSONArray getAll() {

    JSONArray array = new JSONArray();

    try {
        Query q = pm.newQuery(Job.class);       
        List<Job> resultSet = (List<Job>) q.execute();
        Collections.sort(resultSet);
        Iterator i =resultSet.iterator();

        while (i.hasNext()){
            Job j = (Job) i.next();

            if(j.getDateDue().after(new Date())){
                JSONObject tempjson;
                tempjson = j.toJSONObject();
                array.put(tempjson);
            }
        }
        return array;
    } 
    catch (JSONException e) {
            e.printStackTrace();
    }
    catch(Exception e){
        e.printStackTrace();
    }

    return null;
    }
publicjsonarray getAll(){
JSONArray数组=新的JSONArray();
试一试{
Query q=pm.newQuery(Job.class);
List resultSet=(List)q.execute();
Collections.sort(resultSet);
迭代器i=resultSet.Iterator();
while(i.hasNext()){
Job j=(Job)i.next();
如果(j.getDateDue()。在(新日期()之后){
JSONObject tempjson;
tempjson=j.toJSONObject();
put(tempjson);
}
}
返回数组;
} 
捕获(JSONException e){
e、 printStackTrace();
}
捕获(例外e){
e、 printStackTrace();
}
返回null;
}
这是我的职业课。我对代码进行了裁剪,使其只显示属性,而不占用太多空间

  @PersistenceCapable
  public class Job implements Comparable<Job>{

@PrimaryKey
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
private Key jobId;
@Persistent
private String jobTitle;
@Persistent
private String jobDescription;
@Persistent
private String address;
@Persistent
private String priority;
@Persistent
private double latitude;
@Persistent
private double longitude;
@Persistent
private String employeeId;
@Persistent
private Date dateAdded;
@Persistent
private Date dateDue;
@Persistent
private boolean completed;
@PersistenceCapable
公共类作业实现了可比性{
@主键
@持久性(valueStrategy=IdGeneratorStrategy.IDENTITY)
私钥作业ID;
@持久的
私有字符串职务;
@持久的
私有字符串作业描述;
@持久的
私有字符串地址;
@持久的
私有字符串优先级;
@持久的
私人双纬度;
@持久的
私人双经度;
@持久的
私有字符串employeeId;
@持久的
已添加私人日期;
@持久的
截止日期;
@持久的
完成私有布尔运算;

对我来说,应用程序立即处理新的更新数据是非常重要的。我感谢您提供的任何帮助,因为您使用的是“flush memcache”,当您部署的软件使用memcache作为缓存时,您避开了在memcache周围更新实体的常见问题。现在的问题是,当您使用仪式(看跌期权)和后续查询不使用祖先(父)实体。您需要向我们展示一些代码才能确定。

您还没有说明如何检索实体。如果它基于查询,而不是祖先查询,则最终会出现一致性,这可能意味着您不会立即看到更新。感谢回复Tim,我已更新了我的帖子。您现在可以看到我如何查询数据。正如我所说的rlier如果您不使用祖先查询,那么由于最终的一致性,您可能最终会使用旧数据。您应该仔细阅读此主题,因为它是理解如何最好地使用appengine并避免您遇到的问题的基础。嗨,Dave,我添加了代码来说明如何检索数据。我使用JDO,我不认为这是正确的实现我所追求的目标的正确方法。我自己没有使用JDO,而是更喜欢直接向数据存储API编码。我注意到,您没有使用祖先,这会使您的最终一致性受到影响。与手头的问题无关,而是查询所有作业,然后根据当前日期/t对结果进行排序和过滤检索后的ime将失去在服务器端执行排序和筛选的机会。