Suche eine Webseite mit dem aktuelle Datum in XML

Dieses Thema Suche eine Webseite mit dem aktuelle Datum in XML im Forum "Mobile Geräte" wurde erstellt von Meri, 21. Nov. 2016.

Thema: Suche eine Webseite mit dem aktuelle Datum in XML Hallo zusammen, ich bin verzweifelt dran in einer Android App das aktuelle Datum zu ermitteln und zwar nicht das...

  1. Hallo zusammen,
    ich bin verzweifelt dran in einer Android App das aktuelle Datum zu ermitteln und zwar nicht das System Datum, sondern von einer Webseite z.b. in XML.
    Das System Datum kann ich nicht nehmen, da mir damit sonst der Benutzer über das umstellen des Datums, diesen Wert manipulieren kann, deshalb brauche ich sie aus dem Internet z.b. von einer Webseite, welche mir das Aktuelle Datum im XML-Format zur verfügung stellt.
    Vorgestellt habe ich es mir entweder so das ich das XML einer Seite runterlade, welches das Datum enthält, und dieses dann Parse und daraus dann somit das Datum auslese, aber dazu finde ich keine Seite, welche mir das so zur Verfügung stellt. Erst dachte ich mit folgende wäre es eine Option (http://exslt.org/date/functions/date-time/index.html), aber dort finde ich das Datum leider doch nicht.
    Alternativ hab ich es über einen NTPServer versucht es mir abzufragen, mit folgendem Code:
    Code (Text):

    SntpClient client = new SntpClient();
    if (client.requestTime("time.foo.com")) {
        long now = client.getNtpTime() + SystemClock.elapsedRealtime() -
        client.getNtpTimeReference();
        Date current = new Date(now);
        Log.i("NTP tag", current.toString());
    }
     
    von diesem Beitrag:
    http://stackoverflow.com/questions/16787240/android-getting-the-date-and-time-from-a-ntp-server

    Aber auch das hat leider nicht klappt da zum einen der angegebene NTPServer nicht funktioniert aber auch mit anderen es nicht klappt.

    Kann mir hierzu irgendjemand weiterhelfen?
    Das wäre sehr super wenn sich jemand kurz zeit dazu nehmen würde mir zu helfen!
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. Ich denke dein Konzept ist Quatsch.

    Wahrscheinlich willst du über das Datum eine Testphase abfragen oder sowas. Dazu brauchst du nicht das aktuelle Datum. Oder sagen wir so: das aktuelle Datum hilft dir auch nicht.

    Schreib doch einfach bei jedem Start das aktuelle Datum in eine Datei (natürlich verschlüsselt) da kann der User dann das System Datum zurück setzen wie er lustig ist. Wenn das Datum in deiner Datei größer ist als das System Datum, dann hat er gefuscht und deine Software startet nicht.

    Allerdings rettet dich das nicht davor, dass der User deine App einfach komplett löscht und neu installiert. Das würde es eben aber auch nicht wenn du das Datum aus dem Internet holst.

    Gruß

    Claus
     
  4. Das klingt schon gut, aber wie bekomme ich das aktuelle Datum raus wen nicht vom System?

    Und nein es handelt sich nicht um irgendwelche Testphasen sondern einen Adventakalender, bei dem verhindert werden soll das das Türchen von morgen geöffnet wird.

    Deshalb die Frage wie umgehe ich das es der User einfach mit dem umstellen seiner Uhr austriksen kann?
     
  5. Welches meinst du damit und wie rufst du das ab? Ich habe nur das System Datum gefunden, welches ich abrufen kann.

    Magst du mir das noch verraten, das wäre sehr super.

    Vielen Dank schon mal im Vorraus.
     
  6. Joose
    Joose Mitarbeiter
  7. Wenn du verhindern willst, dass die Uhrzeit in die Zukunft geändert wird, dann funktioniert mein System natürlich nicht. Sorry

    Claus
     
  8. kann ich mit der API informationen von der app aus im internet abrufen oder ist das ein extra Tool/Programm welches ich noch installieren müsste auf dem Gerät um die Zeit raus zu bekommen?
    Hab es mir zwar angeschaut, aber komm damit noch nicht so ganz klar. Hast du mir da evtl. ein Beispiel wie ich das verwenden kann?


    Trozdem Danke, dass du versucht hast mit weiter zu helfen.
     
  9. Du musst nichts weiter tun als die Webseite aufzurufen. Für utc z.b.: http://www.timeapi.org/utc/now
     
  10. oh ok ja vielen dank erst mal das klingt schon gut, nur wie baue ich das in eine app(welche in Java programiert ist in Android Studio) ein, so das ich auch den rückgabe wert dan speichern kann?
     
  11. Joose
    Joose Mitarbeiter
  12. Erstmal brauchst du natürlich die Internet permission im manifest, ansonsten musst du aus Code Sicht einfach nur die Seite runterladen, z.B. mit der HttpClient Klasse
     
  13. Ok ja die Internet permission habe ich schon und das andere werde ich so mal ausprobieren.


    Danke für die Hilfe schonmal euch!
     
  14. Also ich hab das jetzt versucht mit dem
    Code (Java):
    HttpClient client = new DefaultHttpClient();
    aber das klappt leider noch nicht und bei der Recherche danach stoß ich auf die Info das es erst ab SDK 8 geht, welche es aber für Android noch garnicht gibt, sondern erst bis 7.1.

    Hat jemand noch eien andere lösung diese HTTP anfrage zu machen bei einer App, ab besten solte es bei Android 4.1 schon umsetzbar sein.
     
  15. Das gibt es seit API Version 1...
    https://developer.android.com/reference/org/apache/http/client/HttpClient.html

    edit:
    Schreib am besten mal was du denn versucht hast
     
  16. also mit der HttpClient klasse hat es garnicht funktioniert schon nur die zeile
    HttpClient client = new DefaultHttpClient(); in den code einzufügen ging nicht, also verlangte nach dem ich den "insert API indexing api code " hinzugefügt hab, nach einer höheren API.
    Und das wäre der ganze code mit welchem ich mit der Zeile noch weiter machen wolte, wenn es geklappt hatte:
    Code (Java):
      HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet("http://www.test.com");
            HttpResponse response = client.execute(request);

    // Get the response
            BufferedReader bufferedReader = new BufferedReader
                    (new InputStreamReader(
                            response.getEntity().getContent()));

            String line = "";
            while ((line = bufferedReader.readLine()) != null) {
                textView.append(line);
            }
        }catch (Exception e)
        {
            e.toString();
        }
    Er lasst mich nicht mal folgenden import machen:

    import org.apache.http.client.HttpClient;
    import org.apache.http.HttpResponse;

    Und dann hab ich jetzt noch mit einer anderen alternative es probiert
    Code (Text):

            HttpURLConnection httpURLConnection = null;
            BufferedReader bufferedReader = null;

            String daten = "";

            try {
                URL url = new URL( "http://www.timeapi.org/utc/now");

                 httpURLConnection = (HttpURLConnection) url.openConnection();

                InputStream inputStream = httpURLConnection.getInputStream();

                bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

               daten =
    bufferedReader.readLine();
     
    welche aber auch noch nicht will also bei dem inputStream eine fehlermeldung bringt, und zwar folgende:
    android.os.NetworkOnMainThreadException
     
    Zuletzt bearbeitet: 24. Nov. 2016
  17. Sagt doch alles.
     
    InfectedBytes gefällt das.
  18. ok aber ich komm leider nicht drauf wie ich es lösen kann, oder was es mir indemfall sagen soll.
    kanst du mir einen tip geben wo mein fehler liegt bzw. wie ich diesen beheben kann?
    das wäre voll super.
     
  19. Auch wenn man keine Ahnung von einer Fehlermeldung hat, ist der erste Schritt diese zu googlen und schon weiß man was los ist und wie man es beheben kann.

    Hier trotzdem mal die Kurzfassung:
    Daten innerhalb des UI threads runterzuladen ist eine ziemlich dumme Idee, da dadurch die UI für die Dauer des Downloads einfriert. Um dem vorzubeugen erlaubt Android es einfach nicht und wirft eine Exception.
    Lösung: Den Download einfach in einem separaten Thread durchführen
     
  20. Ich hatte es bereits gegoogelt aber nicht wirklich was gefunden.
    Danke das du mir doch noch ein Tipp gegeben hast.
    Ich werde es morgen ausprobieren.
     
  21. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!