Italian crash dopo aver compilato la app

Spectre

Active Member
Licensed User
Longtime User
salve, mi succede una cosa che mi sembra impossibile...
quando faccio il debug tutto va liscio, se compilo la app come relase come si apre va in crash!
Dopo vari tentativi ho scoperto che il codice che genera il problema è questo:
B4X:
 For i = 0 To lst0.Size - 1
                Dim MyFile As String
                MyFile=lst0.Get(i)
                If MyFile.Contains(".dat")= True Then                      
                        tw.Initialize(File.OpenInput(Global.GPSDir & "/MieTracce/", lst0.Get(i)))          
                        Line=tw.ReadLine          
                        dummy=Line          
                        pos1=dummy.IndexOf(";")
                        pos2=dummy.IndexOf2(";",pos1+1)
                        pos3=dummy.IndexOf2(";",pos2+1)
                        pos4=dummy.IndexOf2(";",pos3+1)
                        pos5=dummy.IndexOf2(";",pos4+1)          
                        GlobNomeTrack=dummy.SubString2(0,pos1)          
                        GlobDateTrack=dummy.SubString2(pos1+1,pos2)
                        GlobTimeTrack=dummy.SubString2(pos2+1,pos3)
                        lbl_testoPbaar.Text= "Calcolo statistiche in corso per la traccia" & GlobNomeTrack
                     
                end if
      Next

O meglio se aggiungo la sola righe di seguito va in crash!!!!
Ma di brutto appena parte, e questo codice manco è eseguito nella activity principale!!!
Parte e subito dice il programma xxxxx è stato arrestato... fine....

B4X:
  If MyFile.Contains(".dat")= True Then
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Uhm...

Sei sicuro che quello sia il punto?

lbl_testoPbaar potrebbe dare problemi, se hai offuscato il codice; i caratteri di sottolineatura hanno un significato particolare, in questo caso.

Un paio di cose che ho notato (non c'entrano niente, ma già che ci sono... :)).

tw è un TextReader, quindi io lo chiamerei tr, anzi, TxtReader.

Invece di tutti quei Pos e IndexOf potresti usare:
Dim Blocchi() As String = Regex.Split(";", Line)

GlobTimeTrack avrà sempre il valore dell'ultimo dummy.SubString2, quindi i due precedenti sono ininfluenti.

Se GlobTimeTrack si trova sempre dopo l'ultimo punto e virgola, puoi usare direttamente:
GlobTimeTrack = Line.SubString(Line.LastIndexOf(";") + 1)
(anche senza Regex, ovviamente).

B4X:
For i = 0 To lst0.Size - 1
    Dim MyFile As String
    MyFile = lst0.Get(i)
    If MyFile.Contains(".dat") Then             
        tw.Initialize(File.OpenInput(Global.GPSDir & "/MieTracce/", lst0.Get(i))) 
        Line = tw.ReadLine 
        lblTestoPbaar.Text = "Calcolo statistiche in corso per la traccia " & Line.SubString(Line.LastIndexOf(";"))
    End If
Next


Oppure con la variabile GlobTimeTrack; meglio, per un eventuale debug e per la leggibilità.
B4X:
For i = 0 To lst0.Size - 1
    Dim MyFile As String
    MyFile = lst0.Get(i)
    If MyFile.Contains(".dat") Then             
        tw.Initialize(File.OpenInput(Global.GPSDir & "/MieTracce/", lst0.Get(i))) 
        Line = tw.ReadLine
        GlobTimeTrack = Line.SubString(Line.LastIndexOf(";"))
        lblTestoPbaar.Text = "Calcolo statistiche in corso per la traccia " & GlobTimeTrack
    End If
Next
 
Last edited:

udg

Expert
Licensed User
Longtime User
In aggiunta ai suggerimenti di LucaMs, vedrei bene dei tw.close al termine della lettura dell'unica riga dei vari file.
Prova anche un if File Exist o un log sul path+file.

La "stranezza" è capire come mai viene eseguito questo codice allo start-up della tua app se lì non hai riferimenti ad esso. Sempre che il problema derivi effettivamente da questo punto e non da altro.

udg
 

cimperia

Active Member
Licensed User
Longtime User
Prova questo:

B4X:
For i = 0 To lst0.Size - 1
   Dim MyFile As String
   MyFile=lst0.Get(i)
   Try
     If MyFile.Contains(".dat")= True Then  
       tw.Initialize(File.OpenInput(Global.GPSDir & "/MieTracce/", lst0.Get(i)))  
       Line=tw.ReadLine  
       dummy=Line  
       pos1=dummy.IndexOf(";")
       pos2=dummy.IndexOf2(";",pos1+1)
       pos3=dummy.IndexOf2(";",pos2+1)
       pos4=dummy.IndexOf2(";",pos3+1)
       pos5=dummy.IndexOf2(";",pos4+1)  
       GlobNomeTrack=dummy.SubString2(0,pos1)  
       GlobDateTrack=dummy.SubString2(pos1+1,pos2)
       GlobTimeTrack=dummy.SubString2(pos2+1,pos3)
       lbl_testoPbaar.Text= "Calcolo statistiche in corso per la traccia" & GlobNomeTrack  
     End If
   Catch
     Log(LastException.Message)
   End Try
Next
 
Last edited:
Top