Italian Activity.LoadLayout: errore java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

MARCO C.

Active Member
Licensed User
Buonasera,
ormai sono 2 gg che non riesco a capire perché dopo un Activity.LoadLayout("
l'applicazione genera il seguente errore

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

Sono quasi certo che tutto è nato dopo aver lanciato i vari aggiornamento raccomandati
dal SDK manager .

L'errore viene segnalato alla riga

Activity.LoadLayout("frmMnucat")

nel seguente porzione di codice

B4X:
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    'Activity.LoadLayout("Layout1")
    Dim fraseSql As String
        
    Activity.LoadLayout("frmMnucat")
    
    If FirstTime Then
        cartBitmap = LoadBitmap(File.DirAssets, "cart.png")'switch.png
    End If
        
    
    ToolbarHelper.Initialize
    ToolbarHelper.ShowUpIndicator = True 'set to true to show the up arrow
    ToolbarHelper.UpIndicatorDrawable = BitmapToBitmapDrawable(LoadBitmap(File.DirAssets, "hamburger.png"))
    ACToolBarLight1.InitMenuListener


Il loyout viene lanciato in un form precedente , tramite un button con il seguente codice

B4X:
Sub cmdScarico_Click

    Activity.Finish
        'Msgbox("Ancora Non operativo","Chiusura intervento")
        StartActivity("frmMnucat")
'
    
End Sub

l'errore nel debug è il seguente


** Activity (frmanteprima) Resume **
** Activity (frmanteprima) Pause, UserClosed = true **
** Activity (frmmnucat) Create, isFirst = true **
Error occurred on line: 74 (frmMnucat)
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at anywheresoftware.b4a.keywords.LayoutBuilder.loadLayout(LayoutBuilder.java:170)
at anywheresoftware.b4a.objects.ActivityWrapper.LoadLayout(ActivityWrapper.java:209)
at org.appmarco.serviceappnew.frmmnucat._activity_create(frmmnucat.java:406)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at org.appmarco.serviceappnew.frmmnucat.afterFirstLayout(frmmnucat.java:104)
at org.appmarco.serviceappnew.frmmnucat.access$000(frmmnucat.java:17)
at org.appmarco.serviceappnew.frmmnucat$WaitForLayout.run(frmmnucat.java:82)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)

upload_2019-12-3_23-13-29.png


Grazie in anticipo
 

LucaMs

Expert
Licensed User
Longtime User
D

Deleted member 103

Guest
Come mai ha il Layout lo stesso nome "frmMnucat" della form ?
Innoltre, perchè ricarichi il Layout "frmMnucat"?
Dopo la chiusura con il bottone "cmdScarico_Click", dovrebbe tornare automaticamente il Layout frmMnucat, senza bisogno di ricaricarlo.

Innoltre, un modulo si avvia così:
B4X:
StartActivity(frmMnucat)
e non così:
B4X:
StartActivity("frmMnucat")

Un piccolo consiglio: dai al Layout il nome "frmMnucat" e a al modulo "mMnucat", o qualche altro nome, l'importante è creare una differenza.
 

LucaMs

Expert
Licensed User
Longtime User
Un altro commento, oltre a quelli dati da Filippo:
If FirstTime Then
cartBitmap = LoadBitmap(File.DirAssets, "cart.png")'switch.png
End If
Non caricare quella bitmap solo se FirstTime sia True.


Per i nomi, io sono abituato a dare il prefisso "act" ai nomi delle Activity e "lay" ai layout. In questo modo, nel tuo caso avrei actMenuCat e layMenuCat.

Comunque non sono queste cose che fanno andare in crash la tua app.
 

MARCO C.

Active Member
Licensed User
Grazie mille per i vs consigli preziosi..
Questa sera mi metto a lavoro.
Grazie ancora
 

MARCO C.

Active Member
Licensed User
buonasera ,
purtroppo non ho risolto nulla :( .
Quello che mi fa inc.. incavolare è che non posso credere che un progetto salvato 3 settimane ( ver. precedente rispetto a quella che ora va in crash),
anch'essa va in crash ...
Quindi... qualcosa è cambiato da qualche parte : librerie , java ... windows 10 ... non so cosa .. ma qualcosa non gira come prima.

Direi questo punto di chiedermi aiuto sulla base di B4A :
potete dirmi se almeno queste impostazioni sono corrette ? ( parlo di versioni java e sdk )

upload_2019-12-5_22-33-52.png


Grazie in anticipo
 

Sagenut

Expert
Licensed User
Longtime User
Non metterei le librerie aggiuntive in Program Files ma in una directory semplice creata apposta.
E poi prova a mettere Android 28 come piattaforma al posto di Android 29
 

Sagenut

Expert
Licensed User
Longtime User
Fai anche CTRL-P per pulire il progetto prima di compilare di nuovo, dopo aver cambiato piattaforma.
 

MARCO C.

Active Member
Licensed User
Fai anche CTRL-P per pulire il progetto prima di compilare di nuovo, dopo aver cambiato piattaforma.

Grazie,
ora per disperazione sto provando con un aggiornamento all'ultimo Java ( Java SE Development Kit 8u231 )
 

Sagenut

Expert
Licensed User
Longtime User
Prova una cosa alla volta altrimenti poi non capirai quale era il problema.
 

MARCO C.

Active Member
Licensed User
niente da fare .. il problema non sono i percorsi .

l'errore è sempre questo ...
per assurdo ho tolto anche la riga
Activity.LoadLayout("frmMnucat")

... ma mi segnala sempre
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/app/AppCompatActivity

** Activity (frmanteprima) Resume **
** Activity (frmanteprima) Pause, UserClosed = true **
** Activity (frmmnucat) Create, isFirst = true **
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/app/AppCompatActivity;
at de.amberhome.objects.appcompat.ACActionBar.Initialize(ACActionBar.java:29)
at org.appmarco.serviceapp.frmmnucat._activity_create(frmmnucat.java:406)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at org.appmarco.serviceapp.frmmnucat.afterFirstLayout(frmmnucat.java:104)
at org.appmarco.serviceapp.frmmnucat.access$000(frmmnucat.java:17)
at org.appmarco.serviceapp.frmmnucat$WaitForLayout.run(frmmnucat.java:82)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.app.AppCompatActivity" on path: DexPathList[[zip file "/data/app/org.appmarco.serviceapp-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
... 21 more
Suppressed: java.lang.ClassNotFoundException: android.support.v7.app.AppCompatActivity
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 22 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
** Activity (frmmnucat) Resume **
** Service (starter) Destroy (ignored)**
** Activity (frmmnucat) Pause, UserClosed = true **


Esiste una versione aggiornata di AppCompat ( versione 4.00) ?
upload_2019-12-5_23-35-36.png
 

Sagenut

Expert
Licensed User
Longtime User
Metti tutto il testo del Log Errori come citazione (QUOTE) (/QUOTE)
usando le parentesi quadre al posto delle tonde altrimenti diventa un caos.
Per un aggiornamento di AppCompat non so.
Se però prima funzionava direi che non è quello il problema.
Anche io uso Win10 quindi escluderei anche quello.
 

Sagenut

Expert
Licensed User
Longtime User
In SDK Manager prova a cercare AppCompat e vedi che risultati trova.
Perché sembra che ti manchi
android/support/v7/app/AppCompatActivity
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Non metterei le librerie aggiuntive in Program Files ma in una directory semplice creata apposta.
Modo suggerito da Erel su come organizzare le cartelle addizionali:
https://www.b4x.com/android/forum/threads/b4x-additional-libraries-folder.103165/#content
SS-2019-02-26_15.03.08.png




Istruzioni di Erel (relative ad AndroidX):

1. Open Tools - B4A Sdk manager.
2. Install all recommended items. This will make the switch to AndroidX. You can always go back to the previous SDK.
3. Open Tools - Jetifier.
4. Click on Jetify. It is possible that the jetifier will fail to jetify a few libraries. In most cases you can ignore it as those libraries don't need to be jetified.
5. Clean the project (Ctrl + P)
6. Run your project. The compilation dialog will tell you which SDK was used:

B4A Version: 9.30 BETA #2
Java Version: 11
Parsing code. (0.00s)
Building folders structure. (0.01s)
Compiling code. (0.02s)
Compiling layouts code. (0.01s)
Organizing libraries. (0.00s)
(AndroidX SDK)
Generating R file. (0.96s)
Compiling debugger engine code. (0.73s)
Compiling generated Java code. (1.36s)
Convert byte code - optimized dex. (1.06s)
Packaging files. (0.83s)
Copying libraries resources (0.01s)
Signing package file (private key). (0.61s)
ZipAlign file. (0.04s)
Installing file to device. (0.03s)
Installing with B4A-Bridge.
Completed successfully.
 

udg

Expert
Licensed User
Longtime User
C'è un punto nel log dove si legge:
Didn't find class "android.support.v7.app.AppCompatActivity" on path: DexPathList[[zip file "/data/app/org.appmarco.serviceapp-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
Non so se possa esesrti utile per restringere il campo delle ipotesi.
Prova ad aggiornare SDK Manager
 

Sagenut

Expert
Licensed User
Longtime User
@MARCO CORRIAS
Eventualmente se puoi posta un progetto con il difetto così che qualcuno possa provarlo.
 

MARCO C.

Active Member
Licensed User
C'è un punto nel log dove si legge:
Didn't find class "android.support.v7.app.AppCompatActivity" on path: DexPathList[[zip file "/data/app/org.appmarco.serviceapp-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
Non so se possa esesrti utile per restringere il campo delle ipotesi.
Prova ad aggiornare SDK Manager

buongiorno,
per meglio capire la tua osservazione , intendi dire che non trova la libreria

upload_2019-12-7_13-46-40.png


oppure che c'è qualcosa in questi riferimenti
#Extends: android.support.v7.app.AppCompatActivity

upload_2019-12-7_14-7-36.png


purtroppo non riesco ad interpretare l'errore !!

Ancora Grazie :-(
 

Sagenut

Expert
Licensed User
Longtime User
Controlla su SDK Manager di avere questo installato
appcompat.jpg
Io credo che ti manchi questo ed eventualmente altre cose da cui dipende lo stesso.
 
Top