Italian Errore in una linea Java

AlpVir

Well-Known Member
Licensed User
Longtime User
Un lontano e poco informatizzato utente di una mia app mi segnala che ogni qualvolta tocca lo schermo appare un messaggio che non sa precisare meglio se non con un "errore java linea 2404"; l'app peraltro - mi dice - funziona regolarmente. Inutile dire a costui di inviarmi uno screenshot o di darmi ulteriori informazioni.
In base alla sintetica sua descrizione posso io individuare dove c'è l'errore ed eventualmente porvi rimedio con un Try/End Try o altro modo ?
Grazie per l'attenzione.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Non si può risalire alla linea B4A da una java.

invece potrebbe essere possibile.

Se sai il nome del file java e anche la riga secondo me potresti anche farcela.
Vai sulla cartella dell'applicazione e vai alla sottocartella src
Vai avanti nelle sottocartelle fino a trovare tutti i file .java
Apri quello che ti interessa e prova a scorrere, vedrai ad un certo punto il tuo sorgente e la relativa riga tradotta in java,
dove hai il riferimento sia alla riga in java sia alla riga del tuo sorgente, dovresti quindi capire dove si trova l'errore

Sergio
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Il primo suggerimento di LucaMS (leggere il file log) non lo comprendo, pur essendo abbastanza informatizzato.
Il secondo suggerimento (stranamente, conoscendo sia pure solo qu questo forum, il soggetto) non mi pare azzeccato. Leggo difatti che Erel scrive
The line number is not known in release mode. Only the java line number (which is included in the stack trace).

Seguendo viceversa quanto propone sirjo66 sono arrivato allo spezzone di codice alla linea 2404 raffigurato nell'immagine allegata. Direi quindi che la linea incriminata è
B4X:
mycalendarlist = cal.GetListofEventsforCalendarBetweenDates(ValueCalendario,InizioSet,InizioSet+SettimanaMillisec)
che in Java è
B4X:
mostCurrent._vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv2 = mostCurrent._vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv1.GetListofEventsforCalendarBetweenDates((int)(BA.ObjectToNumber(mostCurrent._vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv4)),_inizioset,(long) (_inizioset+_settimanamillisec));

Quindi pensate che scrivendo
Try
mycalendarlist = cal.GetListofEventsforCalendarBetweenDates(ValueCalendario,InizioSet,InizioSet+SettimanaMillisec)
Tot=(mycalendarlist.Size/7)
Catch
Log ("errore L")
End Try
possa essere una soluzione per ovviare all'errore che appare - ripeto - solo a quel certo utente ?

L'app è effettivamente su Google Play (https://play.google.com/store/apps/details?id=alpvir.orario) ma non è memorizzato alcun "arresto anomalo", nulla di nulla.
 

Attachments

  • 2404.jpg
    2404.jpg
    68.7 KB · Views: 222
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Il primo suggerimento di LucaMS (leggere il file log) non lo comprendo, pur essendo abbastanza informatizzato.
Il log sul dispositivo dell'utente. Dovrebbe mandarti quello ma non conterrebbe solo informazioni sulla tua app e forse non saprebbe nemmeno farlo.

Il secondo suggerimento (stranamente, conoscendo sia pure solo qu questo forum, il soggetto) non mi pare azzeccato. Leggo difatti che Erel scrive
The line number is not known in release mode. Only the java line number (which is included in the stack trace).

E infatti Erel scrive che il numero di linea non è conosciuto in Release Mode. Solo il numero di linea Java (che è incluso nel... come lo traduco? Stack trace :))


In effetti, cercando tra i sorgenti java, puoi farcela, me ne ero dimenticato.


possa essere una soluzione per ovviare all'errore che appare - ripeto - solo a quel certo utente ?
Beh, è molto probabile che l'errore non venga più segnalato, ma se quella è la riga b4a a qualcosa servirà, no? Quindi, almeno per quell'utente :)eek:) il codice non sarà eseguito correttamente.

Come detto, non mi metto a leggere i sorgenti java, di solito ma tutte quelle vvvvvvvvvv dovrebbero indicare che hai offuscato l'app e che quindi qualche routine / metodo non viene trovato.

Non hai il sorgente di quel:
GetListofEventsforCalendarBetweenDates
?


Beh cerco quel metodo, vediamo cos'è
 

LucaMs

Expert
Licensed User
Longtime User
No, non hai il sorgente, fa parte di una libreria.
upload_2016-9-10_17-38-29.png


Se sei sicurissimo che l'errore sia in questa linea b4a, ci possono essere solo due motivi:
1) uno dei parametri passato è errato (soprattutto il primo, calID)
2) (e mi sembrerebbe strano) la libreria non verifica che FinishTime sia succesivo a StartTime e provochi l'errore durante la ricerca.

Mah, comunque dovresti verificare per quale strano motivo capiti solo a quell'utente; potrebbe dipendere dalla versione di Android che ha, ma possibile che l'abbia solo lui?
 
Last edited:

AlpVir

Well-Known Member
Licensed User
Longtime User
Effettivamente la linea richiama una libreria che gestisce gli eventi di GoogleCalendar. E' più probabile, come hai detto tu, che sia CallID il responsabile.
FinishTime è sempre successivo a StartTime visto che SettimanaMillisec è una costante positiva.
L'errore mi viene segnalato da un utente, ma è possibile che anche altri l'abbiano riscontrato ma non lo hanno segnalato visto che non sembra sia essenziale.
Mi sembra di capire che la strategia da me studiata sia corretta e, probabilmente, produce un risultato positivo.
Nelle future versioni dell'app vedrò di studiare un meccanismo che almeno visualizzi un ToastMessageShow in caso di errore.
 
Top