0

我有一个在我的 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!");
    }

编辑:::::::::

这看起来怎么样?

我最终只是使用 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!");
                }
4

3 回答 3

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];
                                   }
                               }
                           }));
于 2013-07-15T02:51:52.423 回答
1

本机应用程序应保留您要解析的文件的 MD5 哈希值。在请求文件之前,请从服务器请求其 MD5。如果此 MD5 与您的本地 MD5 匹配,则不要请求该文件。否则做并解析它。如果解析了新文件,请不要忘记更新本机 MD5。

于 2013-03-05T21:23:42.517 回答
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
}
于 2013-03-05T21:39:06.400 回答