您可以将该域对象的数据保存在单例中,然后当您进入详细信息页面时,有两种方法可以使用。
例如,如果您有一个 Person 类的列表。
public class Person {
private String name;
private Image img;
...
}
然后你可以有一个 PersonCache ,它是一个单例缓存列表中选择的最后一个 Person 的数据:
public class PersonCache {
private Person cachedPerson;
private static PersonCache instance;
private PersonCache(){
...
}
public PersonCache getInstance(){
if(instance == null){
instance = new PersonCache();
}
return instance;
}
public Person getCachedPerson(){
return cachedPerson;
}
public void setCachedPerson(Person p){
cachedPerson = p;
}
}
因此,onCreate
当您完成获取 JSON 数据时,您将创建一个 Person 对象并调用setCachedPerson
.
如果您知道详细信息页面中的数据不会更新:
在onCreate
详细信息页面中,您检查已选择的对象是否与您的单例中缓存的对象相同(如果对象在您的数据库中具有唯一的 id您可以查看那些以检查是否相同)。
如果您不知道是否有新数据:
您可以在 AsyncTask 中发出 GET 请求时使用If-Modified-Since技术。
基本上你要做的是添加一个标题参数键:If-Modified-Since value: Sat, 29 Oct 1994 19:43:31 GMT
如果服务器没有新数据,它可以响应304
并且不发送响应正文,但是如果它有新数据,它将200
像正常一样响应并发送数据。
实现这一点也需要在服务器端进行一些实现。以下是有关该技术的更多信息:http:
//www.w3.org/Protocols/rfc2616/rfc2616-sec14.html(第 14.25 节)