German B4XUI + Designerdatei (.bal)

Heinz

Active Member
Licensed User
Longtime User
Hallo, kann mir jemand helfen ?
Ich will eine App machen, um die Zählerstände von Mietern abzulesen und zu speichern.
Irgendwie komme ich nicht mit den B4xPages klar. Die .bal wird zwar vom Designer
geladen, aber nicht beim compilieren eingebunden, obwohl ich mit dem Dateimanager
die Datei eingeladen habe.
Als zweites : wie beende ich die App ?
Habe einen extra Button zum Beenden, aber Activity.finish wird als Fehler ausgewiesen.
Wäre schön, wenn mir jemand helfen könnte. Projekt ist anbei.
PS:
Wo speichert man denn am besten so eine .csv ? Mit zunehmenden Androidversionen
wird das ja immer restriktiver. Mir wäre da FileDirExternal am liebsten, wo ich sie auch
mit dem z.B. MyPhoneExplorer zum Kopieren auf PC finden kann.
 

Attachments

  • Strom.zip
    10.7 KB · Views: 78

klaus

Expert
Licensed User
Longtime User
Beiliegend findest Du eine geänderte Version.

1. Activity nicht im B4XMainPage Modul deklarieren.
Activity kannst Du mit B4XPages vergessen.

2. Activity.Finish durch ExitApplication ersetzen.
In Android wird standardmässig ein Programm mit dem "<" Button verlassen, das bleibt trotz Deines "Ende" Buttons immer noch aktiv.

Ich habe mir erlaubt den Views sinnvolle Namen zu geben.
In der B4XTable muss man die Spalten initialisieren bevor man Daten eingeben kann.

Zum speichern der Daten funktioniert vorläufig noch RuntimePermissions.GetSafeDirDefaultExternal.
Mit Android SDK-Version 31 getestet

Aus dem Programm könnte man sehr leicht in ein Multi-Plattform Projekt machen, zu mindest B4A und B4J.
Es ist viel schneller Programme in B4J zu testen.
Falls Du daran interessiert bist könnte ich es machen.
 

Attachments

  • Strom1.zip
    11.1 KB · Views: 89

Heinz

Active Member
Licensed User
Longtime User
Erstmal vielen Dank für die Starthilfe.
Da kann ich ja mal weiter basteln.
Es soll mal was für meine Verwandte werden, die mehrere Mieter in einem Haus hat.
Da ist es eben am besten, wenn man mit dem Smartphone, anstatt von Hand auf Zettel,
die Daten vom jeweiligen Zähler eingeben kann. Diese sollen ja später auch auf den PC
übertragen werden. Da wäre später ein B4J-Projekt auch sinnvoll.

Ich hätte da auch schon einige Ideen, was die .apk betrifft :
Vielleicht kann ich die Datensätze auch per Bluetooth zum PC übertragen. Da wäre zum
Überlegen, ob auch so ein BT-USB - Modul mit Tastaturweiche gehen würde. So ein BT-Stick
wird ja oft bei BT-Tastaturen und EAN/QRCode-Scannern benutzt. Ich selber habe so eines
für meinen Tierchipscanner und EAN Code-Scanner. Da hätte man nicht mehr den ganzen
Kram mit dem seriellen Port (COMX, Baud, Parität usw.) . Für die BT-Tastaturweiche braucht
man nur ein einzeiliges oder mehrzeiliges Eingabefeld (Edittext), das den Focus hat. Ich habe
ja auch schon so eine Tierchip - APK gemacht, in der ich in einem Eingabefeld einfach warte,
bis der Scanner die Chipnummer sendet. Diese wird dann ausgewertet (Land + Hersteller).

Auch interessant wäre, wenn man sich von jeder Zählernummer einen EAN 128 - Code macht.
Diese könnte man ja an die Zählerkästen kleben. Da ja heutzutage fast jedes Smartphone
auch scannen kann (gibt ja auch ein paar Libs für B4A), wäre es ja kein Problem, die Zähler-
nummer einzuscannen. Das würde das lästige Eintippen der Nummer ersparen und eine
Fehleingabe wäre ausgeschlossen. Wäre dann nur der Zählerstand und Datum zum Handeingeben.

Das sind mal so meine Gedanken, wie es werden könnte.
 

klaus

Expert
Licensed User
Longtime User
Hört sich gut an.
Für das Datum eingeben könntest Du als 'default' Wert das Datum des Tages vorwählen was in meiner Version schon drin ist.
Und für andere eine 'DatumView' nehmen, es gibt einige im Forum.
Die verschiedenen Daten würde ich in einer SQLite Datenbank speichern.
Da kann man vieles leicht machen, hauptsächlich filtern.
 

Heinz

Active Member
Licensed User
Longtime User
Die verschiedenen Daten würde ich in einer SQLite Datenbank speichern.
Ob sich dieser Aufwand lohnt (max 10 Datensätze) ? Filtern brauche ich eigentlich nichts.
Die eigentliche Auswertung (Zählerstand Vormonat(e) ) + Berechnung will ich gerne
am PC machen. Es geht eigentlich nur darum, die Zählerstände mobil zu erfassen und
später zum PC zu senden. Da genügt es, die einzelnen Zeilen des Grids hintereinander zu
senden.
 

klaus

Expert
Licensed User
Longtime User
SQLLite ist eine einfache Sache, man muss sich nur einmal damit befassen.
Ich verstehe dass die Aufgabe mit dem Smartphone hauptsächlich nur die Erfassung der Werte ist.
Und da macht was Du geschrieben hast auch Sinn.
Für die PC Version macht für mich eine Datenbank Sinn.
Ich hatte mich auch von Datenbanken gescheut und habe mich dann mal ran-gesetzt, um die B4X SQLLite Databank zu schreiben, und es ist (war) leichter als ich es mir dachte.
 

Heinz

Active Member
Licensed User
Longtime User
So nebenbei :
Was muß ich bei der Gridbox umstellen, damit bei mehr als die 6 Einträgen
man vertikal scrollen kann ? Oder geht das nur mit den vorgesehenen Pfeilen ?
 

Heinz

Active Member
Licensed User
Longtime User
Was ist Gridbox ?
die B4XTable meinte ich. Das Tabellen-Control, das man im Designer erstellt.
Der horizontale und vertikale Anker ist zwar gesetzt, aber nur der horizontale,
von links nach rechts und umgekehrt, funktioniert. Wenn da mehr Einträge, als
sichtbar reinkommen, müßte das Teile ja auch nach unten scrollen und auch
wieder zurück. Oder ist das zusammengesetzt aus einer Listbox ? Das gleiche
Problem hat man ja auch bei der Listbox. Wenn man nach unten scrollen möchte,
ist da ein ScrollView besser geeignet, so wie bei Erels TableExample.

dachte, den Namen Gridbox kennt auch jeder.
 
Last edited:

klaus

Expert
Licensed User
Longtime User
B4XTable hat den grossen Nachteil dass man nicht senkrecht scrollen kann.
Es ist seitenweise aufgebaut.

Eine einfache Tabelle aufzubauen ist relativ einfach.

Es gibt die Table CustomView, es ist aber eine sehr grosse Class.
Ich habe zwei nicht veröffentlichte CustomViews: xTable das ist eine B4X Version der Table CustomViews.
ne abgemagerte Version der xTable.
 

Heinz

Active Member
Licensed User
Longtime User
Nun gut, Das Scrollen mit den Pfeilen (seitenmäßig) reicht mir ja auch.
Könntest du mir auch eine kleine Routine zum Speichern und Laden der
Tabelle in eine Datei machen ? Geladen werden soll sie dann beim Programmstart.
Vorerst genügt mir das mal als Textdatei. Später werde ich mich dann mal SQLLite
anschauen. Da wäre ein Codeschnipsel zum Laden/Speichern dann auch hilfreich.

PS: Kann man bei COLUMN_TYPE_NUMBERS die Zahlen auch ohne die Tausenderstellen (,)
im Edit haben ? Oder gibt es da auch was, wie ein Gebietsschema in Windows ?

Das wäre dann besser beim späteren Rechnen mit den Zählerständen. Das Komma
müßte ich ja sonst wieder raus pfrimeln.
 

klaus

Expert
Licensed User
Longtime User
Beiliegend die aktuelle Version des Projektes.
Es ist B4XPages Projekt, getestet mit B4J und B4A.

1670949706841.png


Man kann :
- Einträge ändern
- Einträge löschen
- Einträge hinzufügen
- Die Tabelle filtern
- Die Tabelle Spalten sortieren, click auf die Kopfzelle. Das kleine gelbe Dreieck zeigt die Richtung an.

Alles ist noch nicht getestet, das Projekt ist eher ein Demonstrator um zu zeigen was möglich ist, als kein Endprodukt.
Die xTableLite Class ist immer noch in Arbeit. Es ist so zu sagen eine leichte Version der xTable Class, ist aber trotzdem noch gross.
Ich habe den Gedanken eine xTableTiny Class zu schreiben, mit weniger Funktionen für einfache Anwendungen und natürlich kleiner.

Eine direkte Verbindung zwischen PC (B4J) und Smartphone (B4A) ist noch nicht drin.
Da muss ich erst tiefer suchen, habe so etwas noch nie gemacht.
In den Logs siehst Du die beiden Ordner wo die Datenbanken gespeichert sind.
Man kann, manuell, die Datenbank von einem Gerät auf das andere Gerät kopieren.
Ich weiss, es ist keine Lösung, deswegen weiter suchen.

Die Datenbankstruktur kann natürlich je nach Bedarf erweitert werden für Kostenrechnungen usw.

Du musst natürlich definieren was in dem B4J Programm sein soll und was in dem B4A Programm sein soll.
So wie ich verstanden habe soll die PC Version eher die Datenbank Verwaltung machen und die Smartphone Version die Aufnahme der Daten machen.
 

Attachments

  • StromB4XPages.zip
    54.6 KB · Views: 85

Heinz

Active Member
Licensed User
Longtime User
Danke nochmals für die Hilfe.
Habs mal ausprobiert. Ist soweit schon ganz gut.
Den Filter brauche ich jetzt nicht unbedingt, da es sich ja nur um sehr wenige
Datensätze handelt.

Was jetzt B4J betrifft, so wird das doch etwas schwieriger mit der Datenübertragung zum PC.
Ich habe jetzt die Datei zaehler.db mit meinem MyPhoneExplorer gefunden. Da ich erst im
externen Speicher wegen GetSafeDirDefaultExternal nichts gefunden habe, suchte ich im
internen Speicher. Unter ANDROID\data\b4a.Strom\files\ wurde ich dann fündig. Ob man
so eine Suche einem unbedarften User zumuten kann, wage ich zu bezweifeln. Und mit den
mitgelieferten Dateimanagern findet man sowas erst recht nicht. Ich bin jetzt recht fit, um so
eine Sisyphusarbeit zu machen, aber jemand anderem würde ich das nicht zumuten.

Daher denke ich, daß man die Daten am besten mit Bluetooth oder WLAN übertragen
sollte. Das kann man wenigstens in B4A und B4J integrieren. Ein BT-Device oder IP ist ja in
den Einstellungen schneller zu finden. Ist auf jeden Fall leichter in der Bedienung als obiges.

Eine Cloud möchte ich jetzt auch keinem aufzwingen, obwohl das ja heutzutage hipp ist.
SD-Karte ist auch wieder so eine Sache, da die neueren Smartphone Generationen keinen
Kartenslot mehr haben, da genügend ROM und RAM zur Verfügung stehen bzw. gleich mitgekauft
werden können. So ist es mal bei meinem Redmi Note von Xiaomi.

Vielleicht hast du ja noch einen anderen Vorschlag.

PS: Bin schon seit 1,5 Jahren Renter und somit viel Zeit für sowas.
 

klaus

Expert
Licensed User
Longtime User
Es klar dass das manuelle Übertragen der Datenbank keine Lösung ist!

Ich bin gerade daran eine Bluetooth Verbindung einzubinden.
Basiert auf diesem Beispiel:
Und ein Neueres:

Das ist für mich auch Neuland.

Übrigens, ich bin seit fast 16 Jahren in Rente, davon 3 in Frührente.
 

Heinz

Active Member
Licensed User
Longtime User
Ja, da hatte ich auch an sowas wie im Anhang gedacht :
Am besten beide Optionen (BT/WLAN). Das braucht ja auch nur einseitig vom Smartphone zum PC
zu funktionieren, also kein vollständiges Chatprogramm. Senden der einzelnen Zeilen
der Tabelle und Empfangen in einer mehrzeiligen Textbox in B4J genügt da schon. Auseinander
pfrimeln kann man das ja anschließend in B4J.
Deswegen auch die Überlegung mit einem BT - HID USB. Da bräuchte man in B4J fast gar nix zu machen.
Die Zeilen könnten automatisch in so eine MultiEdit - Textbox reinlaufen.
Müßte ich mal probieren, wenn ich eine BT-Verbindung hinbekomme.
 

Attachments

  • Filetransfer.png
    Filetransfer.png
    57.1 KB · Views: 69
Last edited:

Heinz

Active Member
Licensed User
Longtime User
So, ich habe jetzt mal die Bluetooth-Beispiele (B4A+B4J) durchgetestet. Die funktionieren
sehr gut. Was mir noch nicht ersichtlich ist : Ich will jetzt eine 2.Seite (Page/Tab) einrichten,
in der ich dann mit Bluetooth connecte und die Tabellenzeilen nacheinander sende.
Jetzt finde ich im Designer nichts, wie ich eine neue Page erstelle. Dazu möchte ich dann
ein zweites Layout laden.
Muß ich das per Hand machen und sind die Elemente (xTable usw.) in der neuen Page auch
greifbar ? Zum senden muß ich ja die Tabelle auslesen.
 

klaus

Expert
Licensed User
Longtime User
Im Designer kannst Du nur Layouts erstellen und diese sind unabhängig von Activities, Forms usw.
Man kann ein gleiches Layout mehrmals laden.
Jetzt zu Deinen konkreten Fragen:
1. Für eine neue Page musst Du ein neues B4XPage Class Modul hinzufügen:

1671364156006.png


Und seinen Namen eingeben:

1671365067086.png


Diese Page musst Du in der M4XMainPage deklarieren, initialisieren und erstellen.
Das ist HIER beschrieben.
In Class_Globals:
B4X:
    Public Blue As PageBlue
Und in B4XPage_Created:
B4X:
    Blue.Initialize
    B4XPages.AddPage("Blue", Blue)

2. Man kann auf Views, die einer Page erstellt wurden, von andern Pages zugreifen.
Man muss sie als Public deklarieren.
Das ist HIER erklärt.
 
Top