2016-06-10 1 views
0

Ich habe eine Schleife geschrieben, die das Dateiänderungsdatum auf zwei Dateien überprüft. Dies ist erfolgreich, soweit der Toast-Text betroffen ist. Allerdings kann ich nicht scheinen, die Syntax zu erarbeiten, um die Daten tatsächlich zu vergleichen, Date1 vergleichen> Date2 wird tatsächlich von Android Studio abgelehnt.Datei Änderungsprüfung auf Android

Viele Tipps, wie Sie das letzte Änderungsdatum erhalten, finden Sie in Stack Overflow, nur nicht die Antwort darauf, wie Sie die notwendige if-Anweisung erstellen.

Jede Hilfe würde am meisten geschätzt werden. (Ja, ich habe Dokumentation! Anwendungsbeispiele schlecht zu diesem Thema)

Handler mHandler = new Handler(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // Email sync loop (maybe change for watcher method) 
    new Thread(new Runnable() { 
      @Override 
      public void run() { 
       while (true) { 
        try { 
         Thread.sleep(10000); 
         mHandler.post(new Runnable() { 

          @Override 
          public void run() { 
           Toast.makeText(MainActivity.this, "Loop", Toast.LENGTH_SHORT).show(); 
           File file = new File(String.valueOf(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + "/Database1.db"))); 
           if (file.exists()) { 
            Date lastModified = new Date(file.lastModified()); 
            String modified = lastModified.toString(); 
            Toast.makeText(MainActivity.this, modified, Toast.LENGTH_LONG).show(); 
           } 
           File file2 = new File(String.valueOf(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + "/Database2.db"))); 
           if (file2.exists()) { 
            Date lastModified2 = new Date(file2.lastModified()); 
            String modified2 = lastModified2.toString(); 
            Toast.makeText(MainActivity.this, modified2, Toast.LENGTH_LONG).show(); 
           } 
          } 
         }); 
        } catch (Exception e) { 
         // TODO: handle exception 
        } 
       } 
      } 
     }).start(); 
} 

Antwort

0

Sie haben keinen separaten Thread benötigen, die Schleife und den sleep() Anruf, Sie einfach die Kontrolle über die Methode postDelayed() mit Handler Instanz planen können . Es wird auf dem Hauptthread ausgeführt, was vollkommen in Ordnung ist und die App nicht blockieren wird. Als letzten Schritt in Ihrer Runnable Instanz können Sie sie erneut planen, sodass sie in einer Schleife ausgeführt wird.

Wenn Sie es stoppen möchten, rufen Sie removeCallbacksAndMessages(null) auf dem Handler.

Ich bin mir nicht sicher, was Sie damit erreichen möchten, aber vielleicht statt eine Abfrageschleife zu verwenden, können Sie FileObserver Klasse für die Überwachung von Dateiänderungen verwenden, here ist ein Beispiel, wie Sie es verwenden.

+0

Das sieht gut aus, danke. Ich werde jetzt daran arbeiten, die Methode durch Ihren Vorschlag zu ersetzen. Ich werde das resultierende Codebeispiel veröffentlichen, wenn ich es über FileObserver.MODIFY funktioniert. – NormalUser

0

Zum Vergleichen von zwei Daten können Sie immer ihre Millisekundenwerte vergleichen.

Für z.B. date1.getTime()> date2.getTime()

getTime() -Methode gibt die Zeit in Millisekunden zurück und es ist ein langer Wert, der leicht verglichen werden kann.

+0

Danke dafür. Hast du ein Anwendungsbeispiel? – NormalUser