我有一个我在Android应用中解析的XML文件。如果文件没有被更改,我想不解析它。
我可以获得上次修改文件的时间,并且我可以从GMT中的服务器标题中获取最后修改日期,但我不确定现在该做什么...
//this is a string: status.getHeader("last-modified");
//Shows like so: Tue, 05 March 2013 16:45:02 GMT
String serverlastmodified = status.getHeader("last-modified");
Log.e("Header",serverlastmodified);
Date s = status.getTime();
String filelastgotten = s.toGMTString();
//String shows like so: 5 Mar 2013 19:41:43 GMT
Log.e("LM", filelastgotten);
//this needs to be a great-than / less-than?
//But I cannot do that to a string... so change to int?
if(serverlastmodified.equals(filelastgotten)){
Log.e(TAG,"YES!");
}else{
Log.e(TAG,"NO!");
}
EDIT :::::::::
这看起来怎么样?
我最后只是使用SimpleDateFormat和toGMTString()确保两个日期不相同;
String serverLastModified = status.getHeader("last-modified");
SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyy HH:mm:ss zzz");
Date d = null;
try {
d = sdf.parse(serverLastModified);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Date fileLastGotten = status.getTime();
Log.e("DATE1", d.toGMTString());
Log.e("DATE2", fileLastGotten.toGMTString());
if (d.before(fileLastGotten)) {
Log.e("DS", "YES!");
} else {
Log.e("DS", "NO!");
}
答案 0 :(得分:1)
我刚刚完成了一个名为droidQuery的开源库,如果数据未被修改,可以通过返回错误而不是成功来为您处理此任务:
$.ajax(new AjaxOptions(url).type("GET")
.dataType("XML")
.ifModified(true)
.context(this)
.success(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
Document xml = (Document) params[0];
//TODO parse XML Document
}
})
.error(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
int status = (Integer) params[1];
if (status == 304) {
Log.i("ajax", "data was not modified. No need to parse");
}
else {
Log.e("ajax", "error: " + (String) params[2];
}
}
}));
答案 1 :(得分:0)
本机应用程序应保留您要解析的文件的MD5哈希值。在请求文件之前,请从服务器请求其MD5。如果此MD5与本地MD5匹配,则不会请求该文件。否则做并解析它。如果解析了新文件,请不要忘记更新本机MD5。
答案 2 :(得分:0)
你应该用
来捣蛋try {
long serverTime = Date.parse(serverLastModified).getTime();
long myTime = status.getTime.getTime();
if (serverTime != myTime) {
//Not equals
} else {
//equals
}
} catch (Exception e) {
//can't parse server string
}