Datei von Server auslesen (Java)?
Hallo,
ich würde gerne bei meiner App eine Textatei von meinem FTP-Server auslesen. Das hat auch eigentlich funktioniert, bloß jetzt geht auf einmal es irgendwie nicht mehr. Ich arbeite mit AndroidStudio.
Das ist der Code:
Die Variable "startUrl" ist in dem Muster: "ftp://benutzername:passwort@domain/"
Wenn ich die Funktion "update()" aufrufe, dann wird mir im Logcat nur "yes1" ausgegeben und nicht "yes2", also muss irgendwo beim InputStream der Fehler sein bzw. da hängt es. Eine Fehlermeldung im Logcat erhalte ich nicht. Hat jemand eine Idee, wo der Fehler liegt oder wie man das Problem lösen könnte?
Freue mich auf hilfreiche Antworten
PS: Mein Handy hat die ganze Zeit Wlan, also daran liegt es nicht...
1 Antwort
1) Läuft noch irgendeine andere Instanz der Anwendung?
Wenn die Ausführung der Methode durch irgendetwas blockiert wird, dürfte ja irgendwann eine Exception aufgrund eines Timeouts geworfen werden.
2) Ist der FTP-Server selbst denn noch erreichbar?
PS.: Ich würde dir im Übrigen empfehlen, den BufferedReader zu schließen. Der schließt den inneren Stream dann auch automatisch.
Ich habe es an einem anderem Handy getestet und es hat auch nicht funktioniert. Dann habe ich noch eine ganz neue App erstellt nur mit dieser einen Funktion und es hat wieder nicht funktioniert. Wenn ich es aber in Eclipse mit einem ganz normalen Java Programm getestet habe, hat es funktioniert. Dass heißt zusammengefasst: Es liegt nicht an der App und auch nicht an dem Handy. Außerdem tritt das Problem nur bei Android Apps auf, heißt es liegt auch nicht an dem Server. Kann es sein das man noch irgendwas bei Android Extra aktivieren muss, was man bei normalen Java Programmen eben nicht machen muss, damit es funktioniert? Ich hoffe Sie haben eine Idee, denn ich bin wirklich komplett ratlos.
Schonmal vielen Dank für Ihre Hilfe.
Wieso rufst du die Funktion eigentlich rekursiv auf? Das Auslesen der Datei kann doch über nur einen Thread gehandhabt werden. Eine ständige Aktualisierung (wenn es denn sein muss) kannst du über eine Schleife bewirken. Lies hier.
Was mir zu deinem Problem noch einfällt:
- Manifest Permissions hast du sicherlich gesetzt? Ich gehe davon aus, denn ansonsten sollte es schon beim ersten Mal nicht funktionieren.
- Hast du dich bei deinen Tests jeweils im selben Netzwerk befunden (PC, SmartPhones)? Verbindungen von außen könnte der FTP-Server ja noch blockieren.
- Wäre SFTP eine Alternative? Du hättest zudem eine sichere Verbindung über einen Port (22).
Ja, das mit der Schleife werde ich ändern und ja alle befanden sich im selben Netzwerk und in der Manifest sind auch die Permissons gesetzt.
Gibt es auch kostenlose SFTP Server, denn ich habe meinen FTP Server momentan kostenlos von bplaced?
Ich kann gleich nochmals versuchen ob es vielleicht mit Mobilen Daten funktioniert.
Viele Dank für Ihre bisherige Hilfe.
Hallo, das Problem ist mittlerweile nur noch sehr minimal. Jetzt funktioniert alles nähmlich aufeinmal wieder ganz normal. Auch bei mehreren Durchläufen hintereinander. Auch wenn man die App schließt und öffnet klappt alles ohne Probleme. Es gibt nur nach einiger Zeit von Wiederholungen der Schleife eine Fehlermeldung, dass das Passwort bzw. der Username falsch wäre und wenn man danach die App neustartet hängt der Code wieder beim InputStream. Dies lässt sich aber beheben, indem man das Gerät neustartet. Dann klappt es erstmal wieder sehr gut, bis halt diese Invalid username/password Fehlermeldung kommt. Könnte es sein dass diese Fehlermeldung einfach an irgendeinem Sicherheitsmechanismus von Bplaced liegt und dass dann da ja mitten in der Verbindung abgebrochen wird und so vllt. irgendeine Verbindung offen bleibt, die dann ein erneutes Verbinden dann verhindert?
Schonmal Danke für die Hilfe.
Habe es jetzt ans Ende der Schleife thread.join(2000) eingebaut und die Fehlermeldung kommt nicht mehr und es funktioniert alles gut. Kann es auch zu so einer Blockade kommen, wenn ganz viele Gerät gleichzeitig auf den Server zugreifen und muss das immer von der gleichen IP-Adresse sein, damit die Verbindung zum Server blockiert wird?
Bei zu vielen Anfragen verschiedener Clients könnte der Server einbrechen. Die Toleranzgrenze ist da aber sicherlich hoch genug.
Eine Blockade macht nur bei bestimmten Geräten Sinn, die es innerhalb kürzester Zeit mehr als einmal versuchen. Meist wird die IP-Adresse für eine Folgeblockade temporär gespeichert.
Der FTP Server funktioniert noch und ja ich glaube sie wird durch etwas blockiert, denn es gibt nach einiger Zeit eine Exception aufgrund eines Timeouts. Jetzt müsste man halt noch wissen, durch was sie blockiert wird...
Schonmal danke für die Hilfe bis jetzt.
Habe es gerade nochmals getestet und da hat es funktioniert. Wenn ich dann aber die App geschlossen habe und sie nochmal geöffnet habe, hat es nicht mehr funktioniert und die weiteren Male dann auch nicht mehr. Ich habe außerdem den Logcat vom wo es funktioniert und wo es nicht funktioniert verglichen und diese waren bis auf, dass beim einen halt auch "yes2" ausgegeben wurde identisch. Vllt. hilft ihnen diese Information noch. Hätten sie eine Idee, was den InputReader blockieren könnte?