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

MARCO C.

Active Member
Licensed User
Longtime 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

Code:
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

Code:
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
 
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ì:
Code:
StartActivity(frmMnucat)
e non così:
Code:
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.
 
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.
 
Grazie mille per i vs consigli preziosi..
Questa sera mi metto a lavoro.
Grazie ancora
 
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
 
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
 
Fai anche CTRL-P per pulire il progetto prima di compilare di nuovo, dopo aver cambiato piattaforma.
 
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 )
 
Prova una cosa alla volta altrimenti poi non capirai quale era il problema.
 
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
 
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.
 
In SDK Manager prova a cercare AppCompat e vedi che risultati trova.
Perché sembra che ti manchi
android/support/v7/app/AppCompatActivity
 
Last edited:
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.
 
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
 
@MARCO CORRIAS
Eventualmente se puoi posta un progetto con il difetto così che qualcuno possa provarlo.
 
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 :-(
 
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.
 
Back
Top