Textdatei in internen Speicher downloaden

  • Antworten:170
  • Bentwortet
Ludy
  • Admin
  • Forum-Beiträge: 7.961

17.04.2020, 08:43:13 via App

Jokel

Ludy Ja jetzt hast auch du gesehen das es nicht unbedingt am asyncon liegt.

Zu 90% liegt es am Download-Manager und 8% am Code. (Zahlen sind nicht ermittelt, sondern geschätzt)

Bei meinem Test bekam ich den Code auch um die Ohren, dann readFile 5 Sekunden verzögert gestartet und schon hat es funktioniert.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

17.04.2020, 09:17:08 via Website

Kann schon sein. Man hat ja bei den wenigen Zeilen nicht gesehen wie es zeitlich zusammen hängt.

Hatte ja zwischendurch auch mal erwähnt das es sein kann das der download noch nicht fertig ist. Was er verneinte.

OK alles gut wenn es denn jetzt geht. Bin noch nicht zum testen gekommen.

Gibt auch Leute die in diesen Zeiten arbeiten.

— geändert am 17.04.2020, 09:18:13

Hilfreich?
patrickk83
Kommentieren
patrickk83
  • Forum-Beiträge: 93

17.04.2020, 09:30:37 via Website

Stimmt, aber dank Homeoffice hab ich Zeit mich auch mit Android zu beschäftigen :-) Was haltet ihr von dem neuen Konzept das ich gepostet habe? Ich hoffe das ich das Gesamtvorhaben da verständlich verdeutlichen konnte

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

17.04.2020, 10:02:43 via App

patrickk83

Stimmt, aber dank Homeoffice hab ich Zeit mich auch mit Android zu beschäftigen :-) Was haltet ihr von dem neuen Konzept das ich gepostet habe? Ich hoffe das ich das Gesamtvorhaben da verständlich verdeutlichen konnte

Welches Konzept? 😜 Bin noch nicht Zuhause, dann schau ich mir das an.

jokel

Gibt auch Leute die in diesen Zeiten arbeiten.

Jap, bist nicht alleine 😓

OK alles gut wenn es denn jetzt geht.

Meins ja, Patrick noch nicht, aber das bekommen wir hier noch zusammen hin.

— geändert am 17.04.2020, 10:03:27

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

17.04.2020, 10:07:15 via Website

Das Problem ist wirklich der Download der zum Zeitpunkt des Lesens noch nicht fertig ist.

habe ich ja auch zwischendurch mal gesagt.

wenn du das im Debugger ausführst hätte das gehen müssen, wenn du einen Brack Point auf deine Read Methode hast und der Debugger anhält ist der Download lange fertig.

Deine read Methode geht nun mit dem richtigen context und dem richtigen Konstruktor was nun auch einer ist.
Es wird jetzt auch der richtige String zurückgegen.
Das es an dem nicht fertigen Download liegen kann hast du ja ständig verneint. Nicht weiter verfolgt.

Meins ja, Patrick noch nicht, aber das bekommen wir hier noch zusammen hin.

ja meines auch mit einer verzögerung und warten auf den fertigen donwnload.

— geändert am 17.04.2020, 10:16:08

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

17.04.2020, 10:33:27 via App

Wenn ich Zeit habe, dann mach ich nen asynctask und http request mit Interface Return dann sollte das ohne Verzögerung funktionieren.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

17.04.2020, 11:01:03 via Website

Im Allgemeinen finde ich es besser nicht fest 5 Sekunden zu warten. Und dann weiter zu machen, und zu hoffen das der Download in den 5 Sek. beendet ist.

@Ludy auch in deinem Projekt machst du eigentlich nicht anderes als zu waten. „handler.postDelayed“
Besser wäre auf ein erfolgreiches Downloaden zu reagieren. Und nicht nur zu warten.

Was wenn man nicht online ist. Und die App das erste Mal gestartet wird ? „Absturz“
Also die Datei noch nicht vorhanden ist.

gut da könnte sein das die Download Manager Alarm schlägt und die Sache beendet. Ist aber auch nicht schön.
in seinem Code würde aber kein sinnvoller string zurück gegeben beim lesen.

— geändert am 17.04.2020, 11:06:10

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

17.04.2020, 11:50:18 via Website

Ja du warst schneller mit dem abschicken. Ich bin nur am Handy. Nicht PC.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

17.04.2020, 19:58:35 via Website

Nur mal als kleine Info die dowload complete action vom manager bräuchte man nur mit einen broadcast receiver abfangen und dort im Code weiter machen.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

17.04.2020, 20:15:14 via Website

Der Manager macht es ja schon in einen Thread und sendet die Action wenn fertig.

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

17.04.2020, 20:56:29 via Website

@Patrick: Ich habe nur das angepasst was fürs laufen gebraucht wurde https://github.com/Ludy87/AntennaRotorControl

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Jokel
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

17.04.2020, 21:12:17 via Website

:)Hallo @Ludy ja mit einer HttpURLConnection asynctask.... geht das auch.

Mit dem Manager und und dem recieiver wäre es einfacher gewesen.

Nun hatte er auch gleich seine Daten Klasse und Liste mit dabei die du ihm mit gegeben hast.

Hast du gut gemacht finde ich.
Habe leider nicht die Zeit dazu gehabt.
;)

— geändert am 17.04.2020, 21:15:40

Hilfreich?
Ludy
Kommentieren
patrickk83
  • Forum-Beiträge: 93

18.04.2020, 09:18:25 via Website

@Ludy: Das sieht top aus, besten Dank!
Also, in der ReadTxtFile werden jetzt die Strings aus der Textdatei in setSatName, setLineOne und setLineTwo gespeichert.

model.setSatName(arrayList.get(i).trim());
model.setLineOne(arrayList.get(i + 1));
model.setLineTwo(arrayList.get(i + 2));
models.setModels(model);
i += 3;

Zurück in der MainActivity:

for (Model model : models.getModels()) {
                /*
                 * TLE MANUELL IMPORTIEREN
                 */
                SharedFunctions.sat_name = model.getSatName(); // name
                SharedFunctions.sat_catnum = Long.parseLong(model.getSatLineOneNumber());

Hier wird dann z.B. über .getSatName der String in der Variable sat_name aus SharedFunctions gespeichert. Wird das jetzt permanent überschrieben oder wie wird das gespeichert? Die Schleife in der ReadTxtFile läuft ja solange bis arraylist.size erreicht ist, also die letzte Zeile der TxtDatei erreicht wurde.
Oder kann man über Model da irgendwie darauf zugreifen?

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

18.04.2020, 09:43:27 via Website

patrickk83

@Ludy: Das sieht top aus, besten Dank!
Also, in der ReadTxtFile werden jetzt die Strings aus der Textdatei in setSatName, setLineOne und setLineTwo gespeichert.

Jein, in einer ArrayList

Wird das jetzt permanent überschrieben oder wie wird das gespeichert? Die Schleife in der ReadTxtFile läuft ja solange bis arraylist.size erreicht ist, also die letzte Zeile der TxtDatei erreicht wurde.

Ja, es wird solange überschrieben, bis die Liste fertig abgearbeitet wird.

Oder kann man über Model da irgendwie darauf zugreifen?

Das kannst du mit z.B. String name = models.getModels().get(0).getSatName();, das wäre dann vom ersten Element der Name.
String name = models.getModels().get(1).getSatName();, das wäre dann vom zweiten Element der Name.

Ein Element sind immer die drei Zeilen, die zusammengehören.

Habe mein Git noch einmal gepusht!

— geändert am 18.04.2020, 09:44:56

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

18.04.2020, 10:11:31 via Website

Hallo Ludy es wird aber immer noch in seinen "SharedFunctions" static Vriablen die lestzen drei zeilen der Datei gespeichert nach der schleife.

das muss er ändern. Denn das will er eigentlich nicht. somit bräuchte er die Schleife nicht .
zu mindesten nicht an dieser Stelle, oder bei dem Aufbau seines Codes.

patrickk83
eigentlich hat du nach der Read Methode die gesamte Datei in deiner ArrayList aufgesplittet.
In einzelne Model Elemente die du einzeln auslesen kannst. Wie hat Ludy schon gesagt.

— geändert am 18.04.2020, 10:27:28

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

18.04.2020, 10:17:22 via Website

Ich kenne das Konzept nicht, und kann es auch nicht erkennen, was mit den Werten passieren soll. Dher habe ich mir keine Gedanken gemacht, die ganzen static variable haben mich schon geschockt :-)

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

18.04.2020, 10:47:48 via Website

Ja soetwas macht man auch nicht. Durch die Liste hätte er auch von überall Zugriff. Wenn die Liste eine Instanz zurückgeben würde also singleton wäre. Oder er muss die Liste an andere Klassen weiter reichen.

Dann braucht er die ganzen static Variablen nicht mehr.

Macht er scheinbar nur so weil er sich die Übergabe in andere Klassen Activity sparen will.

Ist kein guter OOP Stiel.

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

18.04.2020, 10:49:59 via Website

Verstehe jetzt aber das Prinzip. Damit fange ich auf jedenfall was an! Perfekt! Danke nochmals. Aber ich melde mich bestimmt wieder... :-)

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 10:21:04 via Website

@Ludy: Ich habe keinen Überblick über das gesamte Projekt. Ich müsste in der Activity HamSatMenu neue ListViews erstellen. Und zwar soviele wie es Satelliten in der Textdatei gibt (Arraylist.size() / 3) und diese ListViews dann sortieren (nach Datum/Uhrzeit der berechneten Flugbahn). Das müsste mit diesem Aufruf berechnet werden: AosString="Next AOS: " + sf.Daynum2String(nextaos);
Wird die Klasse TleManualImport jetzt nicht mehr benötigt?

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

19.04.2020, 11:04:39 via Website

Moin,
deine Variablen-Namen sind nicht einheitlich, daher musst du dann schon sagen das was ist!

        hamMenuEntries#getHamHoehe
        hamMenuEntries#getHamUDLink
        hamMenuEntries#getHamTimeMaxHeight
        hamMenuEntries#getHamAOSEOS
        sf#Daynum2String(nextaos)

Was ist davon hier drin zufinden?
OSCAR 7 (AO-7)
1 07530U 74089B 20109.86567448 -.00000035 00000-0 63022-4 0 9999
2 07530 101.7944 79.9529 0012501 117.7040 295.9593 12.53643056 78522

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 11:54:18 via Website

Erläuterung der Zahlengruppen Bearbeiten
Im Folgenden sind die Zahlengruppen anhand des aufbereiteten Formats erklärt:

  1. Zeile:

1 Zeile Nr. 1
25544 NORAD-Katalog-Nr.
U Klassifizierung (U=unklassifiziert)
98067A Internationale Bezeichnung, d. h. Startjahr (2 Ziffern), Startnummer im Jahr (3 Ziffern), Objekt des Starts (max. 3 Zeichen)
2006 Epoche: Jahr 2006
040,85138889 Epoche: Tag-Nr. 40 = 9. Februar, Tagesbruchteil 0,85138889 = 20h 26min 00,0s
0,00012260 Widerstandskoeffizient im SGP-Modell:
n
˙
/
2
{\dot n}/2 = 0,00012260 d−2
0,0000e-0 vernachlässigbarer Widerstandskoeffizient im SGP-Modell (meist Null):
n
¨
/
6
{\ddot n}/6 = 0·10−0 d−3
0,86027e-4 Widerstandskoeffizient im SGP4-Modell:
B

B* = 8,6027·10−5 Erdradien−1
0 Ephemeridentyp (0 = SGP4-Modell)
319 laufende Datensatz-Nummer
4 Prüfsumme Modulo 10
2. Zeile:

2 Zeile Nr. 2
25544 NORAD-Katalog-Nr.
51,6448 Inklination
i
i = 51,6448°
122,3522 Rektaszension des aufsteigenden Knotens
Ω
\Omega = 122,3522°
0,0008835 numerische Exzentrizität der Umlaufbahn
ε
\varepsilon = 0,0008835
257,3473 Argument des Perigäums
ω
\omega = 257,3473°
251,7436 Mittlere Anomalie
M
\mathrm{M} = 251,7436°
15,74622749 Mittlere Bewegung:
n
n = 15,74622749 d−1
41309 Umlauf Nr. 41309 seit dem Start
4 Prüfsumme Modulo 10

So werden die Daten zerlegt. Die entsprechenden benötigten Werte wurden dann in der TleManualImport berechnet indem ein String mit drei Zeilen an diese Methode übergeben wurde. Das Ganze müsste aber dann so oft passieren, soviele Satelliten in der Datei sind. Ich glaube 74. vielleicht siehst du dir ja mal die App „Heavensabove“ an. Das Menü Funksatelliten ist genau das was ich nachbilden möchte.

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

19.04.2020, 12:08:48 via Website

Du hast mich falsch verstanden:

    getHamHoehe = DEINE Formel und WERT von den Drei-Zeilen

    getHamUDLink = DEINE Formel und WERT von den Drei-Zeilen

    getHamTimeMaxHeight = DEINE Formel und WERT von den Drei-Zeilen

    getHamAOSEOS = DEINE Formel und WERT von den Drei-Zeilen

In der TleManualImport.java steht nichts von höhe usw.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 12:21:38 via Website

Achso. Ja diese Klasse hab ich nur für die Listviews erstellt. Die hat es im Ursprungscode nicht gegeben. Ich bin das alles glaub ich komplett falsch angegangen. Das Ziel ist, die Sat-Umlaufbahn für alle Satelliten zu berechnen und so wie im Beispielapp darzustellen. Wenn man dann einen Satelliten ausgewählt hat, so sieht man wann der im Bezug auf die eigene Position „sichtbar“ ist.

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

19.04.2020, 12:30:24 via Website

Ich bin das alles glaub ich komplett falsch angegangen.

Um so besser, dann lernst du gleich wie es vielleicht falsch ist bzw. besser geht

Das Ziel ist, die Sat-Umlaufbahn für alle Satelliten zu berechnen und so wie im Beispielapp darzustellen.

Welche Beispiel-App?

Wenn man dann einen Satelliten ausgewählt hat, so sieht man wann der im Bezug auf die eigene Position „sichtbar“ ist.

Das sind für mich Böhmische-Dörfer :-D

https://github.com/Ludy87/AntennaRotorControl/blob/master/app/src/main/java/com/example/antennarotorcontrol/HamSatMenu.java

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
patrickk83
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 12:46:45 via Website

:-) Mit dem Beispiel-App meine ich "heavensabove". So würde ich gerne die einzelnen Satelliten anzeigen und auswählen können. Habe dann ein Programm gefunden welches die Sat-Umlaufbahnen berechnet und auch korrekt anzeigt. Es ist hier zu finden: https://github.com/SM7YSA/android-sat-tracker.git Bei diesem Programm wurden die drei Strings aber manuell festgelegt.

TLE1 = settings.getString("TLE1", "ISS (ZARYA)"); // 180 is the default value.
    TLE2 = settings.getString("TLE2", "1 25544U 98067A   17082.60003199  .00002246  00000-0  41022-4 0  9993"); // 180 is the default value.
    TLE3 = settings.getString("TLE3", "2 25544  51.6421 104.9264 0007319 330.1416 176.9538 15.54243339 48443"); // 180 is the default value.

Und genau hier wollte ich aus der Textdatei die drei Zeilen in TLE1, TLE2 und TLE3 speichern. Die drei Variablen werden dann in einem String zusammengeführt und an TleManualImport übergeben wo die eigentliche Berechnung stattfindet. Ist wirklich sehr kompliziert...
Das github-App ist also die Ausgangsbasis die ja grundsätzlich funktioniert.

Meine ListViews habe ich auch händisch erstellt:
hamArrayList.add(new HamMenuEntries("OSCAR 7 (AO-7)", "43°", "Up: 145.840 / Down: 435.103", "17:32:49", "17:30:26 - 17:35:49", "ic_hamsat_white_48dp"));

Ich müsste hier quasi 74 mal in der hamArrayList adden wobei die Werte natürlich berechnet werden sollen.

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 12:52:50 via Website

Jetzt werden mir mal zumindest alle angezeigt :-)

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 16:11:36 via Website

Ich nutze die App ja, die ist perfekt. Ich möchte aber anhand der Satellitendaten einen Arduino oder einen PI ansteuern und zwei Servomotoren bedienen. Das ist eigentlich mein Ding. Hab mit Java und App-Programmierung so nicht wirklich viel zu tun gehabt. Da tu ich mir extrem schwer. Im Grunde möchte ich diese App nachbauen und um diese Funktion erweitern.

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

19.04.2020, 16:15:25 via Website

Wenn du mit einem Pi arbeitetest, wäre es dann besser eine Web-UI zu erstellen und es dann damit zu steuern?

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 16:16:38 via Website

Wäre möglich, ich arbeite aber am liebsten mit den Arduino's. Von denen hab ich auch noch welche zu Hause und die Servosteuerung ist auch recht simpel.

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 16:43:38 via Website

Nein. Werde ich vielleicht noch machen. Aber das App ist nicht dafür gedacht. Es gibt ja schon fertige Sachen aber ich wollte das halt selbst machen. Möchte ja auch was lernen.
In diesem Umfang benötige ich das App auch nicht wirklich. Ich muss aber eine Struktur hineinbekommen damit ich mich im Code nicht verlaufe.

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

19.04.2020, 17:25:09 via App

Dann mach dir eine Liste was raus soll, und eine Liste was rein soll - Zettel und Stift.

Dann machst du die eine Liste, woher du die Daten bekommst.
Dazu eine welche Datei du berechnen musst.

Die Listen kurz und knapp halten!

Beispiel:

RAW-Datein:

  1. Zeile 0: Name des Satelliten
  2. Zeile 1: Klasse -> zweite Abschnitt letztes Zeichen
  3. Zeile 1: Datum -> berechnen -> vierte Abschnitt -> Formel {x+z=yyyy}
  4. usw.

Die RAW-Daten hast du zu 90% in der Datei, also einen groben Überblick.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 17:33:51 via Website

Ok, werde ich machen. Kannst du mir vielleicht eine Seite empfehlen wo ich nochmal von Anfang an verständlich alles über Klassen etc. lesen bzw. lernen kann? Es ist wirklich schwierig da irgendwie durchzublicken. Für mich zumindest.
Ich verstehe nicht, wann man woraus wie auf etwas zugreifen kann. Als Beispiel, in der einen Klasse wird die Datei geladen und in einem Arraystring gespeichert. Wenn ich jetzt genau diesen Arraystring aber in einer anderen Klasse benötige, wie funktioniert da der Zugriff? Ich meine so eine Art globale Variable. Das ist jetzt ein gutes Beispiel. Nehmen wir diesen Arraystring genauer unter die Lupe. Macht das auch einen Unterschied ob ich den Wert in der MainActivity benötige oder in einer anderen Klasse?

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

19.04.2020, 17:37:46 via App

Seiten gibt es zu genüge, Google ist da dein bester Freund.

Wenn du z.b. eine Klasse wie die ReadTxtFile hast, musst du sie überall wo du eine andere Activity hast initialisieren und entsprechend mit dem Interface bestücken.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 17:50:24 via Website

So eine Liste bzw. brainstorming habe ich schon gemacht. Sieht so aus:

  1. Download Textdatei (wenn schon vorhanden - überschreiben)
  2. Textdatei Zeilenweise auslesen und in ArrayList speichern
  3. Fasse immer drei Zeilen zusammen in einen String
  4. String an Methode übergeben (in diesem Fall war das die TleManualImport). Diese soll dann das übergebene Format in die einzelnen Werte zerlegen
  5. Die einzelnen Werte werden dann wiederum für die Berechnung der benötigten Parameter benötigt (Aktuelle Position Azimuth und Elevation des Satelliten, Datum/Uhrzeit, ...)
  6. Liste ListView erstellen (funktioniert mit den Namen bereits)
  7. Sortiere die Liste nach Uhrzeit und Datum (nächster Satellitenüberflug an oberster Stelle)
  8. Je Listenelement benötige ich den Namen, die maximale Höhe, die Uhrzeit der nächsten maximalen Höhe und Aufgang bzw. Untergang bezogen auf den eigenen Standort

Ich muss also auf die einzelnen berechneten Werte (z.B. Azimuth, Elevation) eines jeden Satelliten auch nach der Berechnung zugreifen können. Diese Werte müssten also gespeichert werden.

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

19.04.2020, 17:58:10 via Website

Die Liste ist schon ein Schritt zu weit, denn du musst mit den RAW-Daten anfangen.

Was steckt drin und was muss berechnet werden oder ggf. auf einer welche weiter Quelle muss genutzt werden.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 18:43:31 via Website

:-) ja wenn man das Ganze beherrscht ist ja einfach :-)

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

19.04.2020, 18:48:31 via Website

patrickk83

Habe noch was interessantes gefunden: https://github.com/s-axford/WatchfulSky.git

Was ist daran interessant?

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

19.04.2020, 19:06:26 via Website

Der Code ist schön aufgegliedert und kommentiert

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

11.05.2020, 07:34:08 via Website

Hallo!

Ich hätte noch eine Frage. In der Model Klasse hast du ja die drei TLE-Zeilen in die einzelnen Bestandteile "zerlegt". Diese werden dann für die Vorberechnung benötigt. Wie soll man am besten vorgehen um für jeden einzelnen Satelliten eine Vorberechnung durchzuführen? Wäre es sinnvoll, dies bereits in der MainActivity im Hintergrund durchzuführen? (jetzt ist eine merkbare Verzögerung vorhanden bevor die Liste im ListView angezeigt wird)
Hier ein paar Überlegungen dazu:

  1. MainActivity: Textdatei herunterladen falls nicht vorhanden oder älter als n-Tage
  2. Model: Textdatei zerlegen
  3. Berechnung durchführen (für jeden einzelnen Satelliten) und speichern
  4. Liste sortieren (nach berechneten Datum/Zeit)
  5. Liste ausgeben (ListView)
  6. ListView aktualisieren (z.B. wenn berechnetes Datum/Zeit > n-Minuten)

Die Klasse Model hat jetzt für einen Satelliten die einzelnen Variablen gespeichert. Ich müsste aber für jeden Satelliten diese Zerlegung durchführen und speichern. Dies ist nämlich die Basis für die spätere Berechnung.

Beispiel:
private void setSatLineOneEpochyr() {
this.satLineOneEpochyr = lineOne.split(" ")[3].substring(0, 2);
}

Hilfreich?
Kommentieren
patrickk83
  • Forum-Beiträge: 93

17.05.2020, 19:22:47 via Website

@Ludy:
Brauche bitte nochmal Rat...
Wie soll ich die Daten am besten verpacken? Nach dem Zerlegen der Zeilen mit Hilfe der getter und setter Methoden der Model Klasse müsste nun mit diesen Daten eine Berechnung durchgeführt werden. Dafür gibt es eine eigene Klasse. Die Daten der Berechnung müssten dann auch gespeichert werden und zwar zugehörig zum entsprechenden Sat-Namen. Dachte da an irgendeine Liste die ich dann sortieren kann. Oder irgendwie mit einem mehrdimensionalen Array? Kannst du mir da bitte einen Tipp geben?

Danke im Voraus

Hilfreich?
Kommentieren
Ludy
  • Admin
  • Forum-Beiträge: 7.961

17.05.2020, 19:41:56 via Website

Wie soll man am besten vorgehen um für jeden einzelnen Satelliten eine Vorberechnung durchzuführen?

In der Setter-Methode machst du die Berechnung, das wird dann auf alle Sateliten umgesetzt.

private void setSatLineOneEpochyr() {
    this.satLineOneEpochyr = DeineWerkzeugKlasse.berechneOneEpocheJahr(lineOne.split(" ")[3].substring(0, 2));
}

Die Daten der Berechnung müssten dann auch gespeichert werden und zwar zugehörig zum entsprechenden Sat-Namen.

Warum speichern bzw. wielange soll das gespeichert werden?

Dachte da an irgendeine Liste die ich dann sortieren kann. Oder irgendwie mit einem mehrdimensionalen Array? Kannst du mir da bitte einen Tipp geben?

Kommt drauf an was du machen willst

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Kommentieren