对App Engine数据存储区中不可见的实体的更新

时间:2013-12-26 00:53:47

标签: android google-app-engine

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

P.S。我曾尝试通过管理控制台使用“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;
    }

这是我的Job课程。我已经修剪了它的代码,只显示属性而不占用太多空间。

  @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;

对我而言,应用程序可以立即处理新的更新数据,这一点非常重要。我感谢任何帮助

1 个答案:

答案 0 :(得分:1)

由于您使用'flush memcache',因此当您部署的软件使用memcache作为缓存时,您可以解决到达memcache以解决更新实体的常见问题。当写入(puts)和后续查询不使用祖先(父)实体时,嫌疑人现在是最终一致性的结果。您需要向我们展示一些代码才能确定。