German Beginnerfehler?

Lothar Kriegerow

Active Member
Hallo,

ich wollte heute einmal B4A testen. Ich habe dazu alle Installationsschritte laut der Anleitung "Anfang mit B4A..." von klaus durchgeführt.
Auf dem Handy Samsung S20 ist B4A-Bridge installiert.
Die Verbindung funktionierte auf Anhieb und beim Wechsel in den Designer konnte ich auch auf dem Handy Resultate sehen.

Um einen ersten Test duchzuführen, habe ich ein neues Projekt erstellt. und gespeichert.

Beim Kompilieren erhalte ich den Fehler:

B4A Version: 10.2
Java Version: 8
Parse den Code. (0.00s)
Building folders structure. (0.02s)
Kompiliere den Code. (0.01s)
Kompiliere Layoutcode. (0.00s)
Organisiere Libraries. (0.00s)
(Android Support Library)
Generiere R Datei. Error
res\values-v14\theme.xml:3: error: Error retrieving parent for item: No resource found that matches the given name '@android:style/Theme.Holo.Light'.
res\values-v20\theme.xml:3: error: Error retrieving parent for item: No resource found that matches the given name '@android:style/Theme.Material.Light'.

Nun finde ich zu dem Fehler "Generiere R Datei" keine aussagekräftigen Informationen.

Könntet Ihr einem Beginner auf die Sprünge helfen?

Vielen Dank schon im Voraus - Gruß Lothar
 

DonManfred

Expert
Licensed User
Longtime User
Um einen ersten Test duchzuführen, habe ich ein neues Projekt erstellt. und gespeichert.
Den code hier nicht zu posten dürfte das grösste problem sein.

Wie soll Dir jemand helfen ohne deinen Code zu sehen?

Auf welchem Code (Quelle) hast Du dein neues Beispiel aufgebaut?

In der IDE File->Export as zip. Uploade dieses zip.
 

Lothar Kriegerow

Active Member
Hallo Klaus,
vielen Dank für deinen Tipp. (Vielleicht sollte man den alten Thread mal löschen - der ist eine böse Falle)
Nachdem ich das Video "Step by Step" abgearbeitet hatte, erstellte ich unter neu - standard ein neues Projekt. Nach Verbinden mit der B4A-Bridge auf dem Handy Start des 1. Projekts mittels F5 erschien auf meinem Handy auch wirklich die App mit dem Button1 und "Hello World"

Als ich jedoch das 2. Mal F5 drückte, kam dieses Fenster:

B4A Version: 10.2
Java Version: 11
Parse den Code. (0.00s)
Building folders structure. (0.05s)
Kompiliere den Code. (0.03s)
Kompiliere Layoutcode. (0.00s)
Organisiere Libraries. (0.00s)
(AndroidX SDK)
Generiere R Datei. (0.00s)
Kompiliere Debugger-Code (0.00s)
Kompiliere generierten Java Code. (0.00s)
Byte-Code konvertieren - optimiert dex. (0.85s)
Packe Dateien. (0.29s)
Kopieren von Bibliothek Ressourcen (0.00s)
Signiere Paketdatei (debug Key). (1.15s)
ZipAlign file. (0.05s)
Installiere Datei auf Gerät. Error
Das System kann die angegebene Datei nicht finden

Seit diesem Fehler habe ich folgendes erfolglos versucht. B4A deinstalliert und neu installiert.
Auf dem Handy die Bridge und den Designer deinstalliert. Die B4A-Bridge neu installiert und alle Rechte neu vergeben. Der Designer des Handys wird beim Erststart neu installiert und die Berechtigungen wurden vergeben.

Das alles war erfolglos.

Wenn ich im B4A in den Designer wechsle und dort über WYSIWYG mit F2 verbinde, erhalte ich folgende Fehlermeldung:

1601368480205.png


Wenn ich aber nun im B4A den ADB Server neu starten will, erhalte ich diese Meldung:

1601368621621.png


Das ist erst mal richtig, da sich die Datei gar nicht an dieser Stelle befindet.
Die 2 Tools-Pfade sind aber meines Erachtens korrekt.

nun habe ich noch folgendes versucht. Ich habe auf meinem alten Samsung S7 die B4A-Bridge installiert und verbunden. Es kommt der gleiche Fehler.
Am Mobilteil scheint es also nicht zu liegen.

Hast Du noch einen Tipp für mich?

Vielen Dank schon mal im Voraus
Gruß Lothar
 

Lothar Kriegerow

Active Member
Hallo DonManfred,

vorab - es funktioniert nun alles dank des Threads von Klaus.
Den Source-Code habe ich nicht gepostet, weil ich keinen eigenen erstellte. Beim Öffnen eines neuen Projekts unter Standard erstellt es ja schon einen Democode. Diesen meinte ich. Sorry.

@klaus - vergiss bitte mein obiges Posting. Mittlerweile habe ich alle Schritte des Erstellens des Verzeichnisses ANDROID noch einmal durchgeführt. Nun funktioniert es.
Mittlerweile weiß ich auch warum.

Gruß Lothar
 

Lothar Kriegerow

Active Member
Hallo Klaus,

Danke für deine Antwort. Ich fitze mich nun mal gerade wieder bissel ein. Ich habe 2015 mal ein kleines Programm geschrieben. Nichts verrücktes, nur ein kleines Englisch-Lernprogramm. Die Daten sind dabei in einer DB. Das Projekt funktioniert auch heute noch ganz gut.
Ich hatte mir mal ein Tagebuch aus dem Store geladen und dort seit 2009 alle meine wichtigen Daten erfasst. Leider ist die App aus dem Store verschwunden, so dass ich befürchte, dass mal irgendwann alles weg ist.

Aus dem Grunde würde ich gern ein eigenes erstellen und die Daten da rein übernehmen.
Seit 2015 hat sich an der Syntax ja einiges geändert, so dass ich wohl wieder fast bei null anfange. Ich bin der englischen Sprache zwar einigermaßen mächtig, (So lala) würde es aber toll finden, wenn es da irgend was in Deutsch gäbe.
Kennst Du eine deutsche Onlinehilfe, oder ein Tutorial, auf was ich zurückgreifen könnte?

Ich habe schon bissel gegoogelt, so richtig fündig werde ich aber nicht.

Ich stolpere schon über die 1. Hürde


In dem Projekt, welches ich vor Jahren erstellte, steht dieser Code

B4X:
Sub Activity_Create(FirstTime As Boolean)
        Activity.LoadLayout("Main")
End Sub

Das Modul heiß ja auch so.

In dem neuen Projekt steht nun:
B4X:
Sub Activity_Create(FirstTime As Boolean)
        Activity.LoadLayout("Layout")
End Sub

OK, wenn ich nun "Layout" in "Main" ändere, wird es als Fehler mit Wellenlinie unterstrichen. Im alten Projekt aber nicht.

(Ich sag ja - totale Beginnerprobleme)


Gruß Lothar

Gruß Lothar
 

klaus

Expert
Licensed User
Longtime User
Hast Du eine Layoutdatei in deinem Projekt?
Siehst Du die Fehlermeldung in den Logs?
Main oder Layout ist der Name der Layoutdatei (Main.bal oder Layout.bal)
Wenn Du das Programm startest, gibt es da eine Fehlermeldung?

Deutsche Hilfedokumentation oder Tutorials kenne ich keine.
 

Lothar Kriegerow

Active Member
Hallo Klaus,

Layout.bal - Ja klar, das war es.
Ich werde mich erst mal intensiv mit der Materie beschäftigen, bevor ich weitere dämliche Fragen stelle.
Das es da nichts in Deutsch gibt, ist schade. Da muss ich wohl meinen inneren Schweinehund noch mal überwinden. :)

Ciao - und vielen Dank für Deine Hilfe.

Gruß Lothar
 

Lothar Kriegerow

Active Member
Ich noch mal - Sorry,
Für den ersten Test habe ich ein, so dachte ich erst, brauchbares Tutorial für den 1. Anfang gefunden.
(SIEHE HIER)
Leider funktioniert schon die 1. Routine "Foto_oeffnen" nicht.

Ich poste mal den Code:
B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Private xui As XUI
    Dim Bildnummer = 0 As Int
    Dim Veraenderung = False As Boolean
    Dim Vorwaerts = False As Boolean
   
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    Dim Verzeichnis As String = "/storage/0096-1800/DCIM/Camera"
    Dim Dateiliste As List
    Private ImageView1 As ImageView
    Private Label1 As Label
    Private Label2 As Label
    Private NotizText As EditText
    Private RueckButton As Button
    Private SpeichernButton As Button
    Private TitelText As EditText
    Private VorButton As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("main")
    Dateiliste.Initialize
    Dateiliste=File.ListFiles(Verzeichnis)
    Bildnummer=0
    Veraenderung=False
    Vorwaerts = False
    RueckButton.enabled=False
    ImageView1.SetLayout(0,0,100%x, 75%x)
    Foto_oeffnen
   
    End Sub




Sub Foto_oeffnen
    'xui.MsgboxAsync("Holppla", "Bis hier ging es gut")
    If File.IsDirectory(Verzeichnis,Dateiliste.get(Bildnummer)) = False Then
       ImageView1.Bitmap = LoadBitmapSample(Verzeichnis,Dateiliste.get(Bildnummer),500,500)
           If File.Exists(File.Dirinternal,Dateiliste.Get(Bildnummer)&".titel") Then
            TitelText.Text = File.ReadString(File.Dirinternal,Dateiliste.Get(Bildnummer)&".titel")
        Else
            TitelText.Text = "no"
      End If
   End If
End Sub

(Leere Routinen wurden hier der Übersichtlichkeit halber gelöscht)

Im Protokoll stehen folgende Warnungen:
Main - 92: Den folgenden Werten fehlen die Bildschirmeinheiten ('dip' or %x / %y): 500. (warning #6)
Main - 92: Den folgenden Werten fehlen die Bildschirmeinheiten ('dip' or %x / %y): 500. (warning #6)
Main - 20: Unbenutzte Variable 'Veraenderung'. (warning #9)
Main - 21: Unbenutzte Variable 'Vorwaerts'. (warning #9)
Wieso nun Veraenderung eine ungenutzte Variable ist und Bildnummer nicht, erschließt sich mir nicht.
Des Weiteren ist ImageView1.Bitmap irgendwie falsch - eigentlich funktioniert die gesamte Routine nicht.

Ich finde die korrekte Syntax auch nach aktivem Suchen leider nicht. Nun kann ich ja nicht wegen jeden Fehlers einen Thread öffnen.
Wie lerne ich am besten die Sprache, ohne nur wie ein Script-Kiddie mir jeden Codeschnipsel zusammenzuklauen?

Wenn ich nun ein Beispiel direkt aus B4A nehme:

Activity.SetBackgroundImage(LoadBitmapSample(Verzeichnis, Dateiliste.get(Bildnummer), Activity.Width, Activity.Height))

bekomme ich den Fehler:

java.lang.RuntimeException: Object should first be initialized (List).

Vielleicht könntet ihr mich ja beim Erststart noch einmal unterstützen?

vielen Dank im Vorraus

Gruß Lothar
 

Lothar Kriegerow

Active Member
Hallo Klaus,

ich hänge das Miniprojekt mal an. Es ist nur ein 1. kläglicher Versuch. Fallt bitte nicht auf den Rücken vor lachen.

😫

(Es sind die 1. abgetippten Zeilen aus dem o.g. Beispiel)

Gruß Lothar
 

Attachments

  • fotonotiz.zip
    10.1 KB · Views: 171

klaus

Expert
Licensed User
Longtime User
Das erste Problem sind Runtime Permissions !
Google gibt immer mehr Grenzen.
Ich habe den Code geändert, und auch im ManifestEditor eine Zeile hinzu gefügt.

Dein Layout hat auch Probleme. Einige Views sind teilweise ausserhalb des Bildschirms.

Für die Bilderliste wäre es besser wenn Du gleich filtern würdest für gültige Namen.
Habe einen einfachen Filter geschrieben.

Was die verschiedenen Warnungen betrifft:
92: Den folgenden Werten fehlen die Bildschirmeinheiten ('dip' or %x / %y): 500. (warning #6)
Masse für Views brauchen eine dip Suffix.

Unbenutzte Variable 'Veraenderung'. (warning #9)
Der Variablen 'Veraenderung' ist ein Wert zugeordnet, sie ist aber nirgendwo benutzt.

Eine gute Angewohnheit ist für den #ApplicationLabel: einen Programmspezifischen Namen einzugeben.
Und den auch in Project / Build Configurations für Package Namen eingeben.

So, das wäre es für heute.

Beiliegend das geänderte Programm.
 

Attachments

  • fotonotiz1.zip
    10.5 KB · Views: 167

Lothar Kriegerow

Active Member
Hallo Klaus,

vielen Dank für Deine unendliche Mühe. Ich werde mir dass morgen mal in Ruhe ansehen und versuchen zu verstehen. Wie kommst Du zu Deinen Erkenntnissen? Gern würde ich selbst die Probleme lösen wollen, nur weiß ich nicht, wo ich nachschauen muss. Es ist wie mit allem. Wenn man es kann ist es einfach.
Der Variablen habe ich explizit extra noch einmal eine Wert im Activity_Create zugewiesen. Das müsst doch eigentlich als benutzt gelten - oder?

Das mit dem Layout: Ich habe das ganze für mein Samsung S20 Plus ausgelegt. Da sind im Designer zwar die Steuerelemente teilweise außerhalb, aber auf dem Handy passte es.
Ich habe versucht, irgend eine Vorgabe zu laden, aber keine passte.

Also - Danke und Ciao.
Vielleicht kann ich ja noch die eine oder andere Frage loswerden..

Gruß Lothar
 

Lothar Kriegerow

Active Member
Hallo Klaus,

ich habe mir Dein Projekt angeschaut und eine Menge gelernt, aber einige Fragen sind geblieben.
Der Befehl: File.DirRootExternal sieht auf den ersten Blick vielversprechend aus. Dieser weißt auf "/storage/emulated/0/DCIM/Camera".
Ich bekomme den Fehler: "ungültiges Verzeichnis." Die App habe ich erfolglos so auf einem alten Samsung S7, auf einem Samsung S9 Plus und dem Samsung S20 Plus getestet.

Wenn ich aber für mein Handy diesen eigenartigen Pfad verwende funktioniert es auf einem Handy:
Verzeichnis = "storage/0096-1800/DCIM/Camera"
die anderen Geräte haben andere Nummern.

Da aber auf allen Geräten andere Viewer problemlos funktionieren, muss es da wohl noch was anderes geben.

Mit meinem Miniprojekt bin ich etwas weiter. Die Bilder werden jetzt zwar im Verhältnis korrekt angezeigt, aber bei dem Versuch die Bilder zu drehen bin ich gescheitert.

Ich weiß nicht mal, ob mein Ansatz so richtig ist. Ich habe das Projekt mal sicherheitshalber angefügt. Vielleicht kannst Du in den nächsten Tagen noch einmal einen Blick draufwerfen?

dem ImageView dip-Werte mittels Variable mitzugeben, bin ich kläglich gescheitert. Das Projekt tut aber trotzdem was es soll.

(könntest Du mir bitte einen Tipp geben, wie ich die Bilder drehe und gedreht abspeichere?)


Gruß Lothar
 

Attachments

  • FotoLesen.zip
    5.7 KB · Views: 164

Lothar Kriegerow

Active Member
Hallo Klaus,

zur Zeit bin ich bissel im Stress. Danke erst mal - ich schaue mir das morgen, wenn ich zuhause bin, an.

Gruß Lothar
 

Lothar Kriegerow

Active Member
Hallo Klaus,

(du scheinst hier der einzige zu sein - oder?)

Zur Zeit habe ich echt ein Problem, die Daten aus der Galerie zu lesen.

Dass File.DirRootExternal die interne Storage ist, habe ich jetzt begriffen. Dort liegen aber keine Bilder. Die Angabe: Verzeichnis = "storage/0096-1800/DCIM/Camera"
funktioniert in dem einen Fall zwar, aber das kann ja nicht die Lösung sein. Eigentlich ist mein Ziel, aus der Galerie Bilder im mein App-Verzeichnis zu speichern. Ganz große klasse wäre, wenn ich aus dem Bild noch ein Thumbnail erstellen könnte. Das sind im Moment meine Probleme.
Den Pfad zum Speichern der Bilder vermute ich mit File.DirInternal, muss ich aber noch testen.


Gruß Lothar
 
Top