1. *** New version of B4J is available ***
    B4J v7.8
    Dismiss Notice

Italian Leggere un .txt e visualizzare a schermo

Discussion in 'Italian Forum' started by Luigi S, Aug 26, 2019.

  1. Luigi S

    Luigi S Member Licensed User

    Ciao,
    apro questo nuovo post per separare le cose e non andare in confusione.

    Per leggere il file di testo e fare una lista dei NameModel, su cui cliccando mi apre il NameModel in questione con i relativi Component, uso questo codice

    Code:
    #Region  Project Attributes
        
    #ApplicationLabel: RC Hangar
        
    #VersionCode: 1
        
    #VersionName: 0.01
        
    'SupportedOrientations possible values: unspecified, landscape or portrait.
        #SupportedOrientations: portrait
        
    #CanInstallToExternalStorage: False
    #End Region

    #Region  Activity Attributes
        
    #FullScreen: False
        
    #IncludeTitle: True
    #End Region

    Sub Process_Globals
        
    'These global variables will be declared once when the application starts.
        'These variables can be accessed from all modules.
        'Private rp As RuntimePermissions
       
    End Sub

    Sub Globals
        
    'These global variables will be redeclared each time the activity is created.
        'These variables can only be accessed from this module.
        Private ListModelView As ListView
        
    Private addPlusButton As Button
           
        
    Dim ListModel(100As String
       
        
    Type ListViewData (FirstRow As String, SecondRow As String, Picture As Bitmap)
       
        
    Private ModelViewPanel As Panel
        
    Private BackModelWiewButton As Button
           
        
    Dim ModelName As String
        
    Dim Component1 As String
        
    Dim Component2 As String
        
    Dim Component3 As String
        
    Dim Component4 As String
        
    Dim Component5 As String
        
    Dim Component6 As String

        
    Private ModelnameLabel As Label
        
    Private Component1Label As Label
        
    Private Component2Label As Label
        
    Private Component3Label As Label
        
    Private Component4Label As Label
        
    Private Component5Label As Label
        
    Private Component6Label As Label
       
    End Sub

    Sub Activity_Create(FirstTime As Boolean)
        
    'Do not forget to load the layout file created with the visual designer. For example:
        'Activity.LoadLayout("Layout1")
        Activity.LoadLayout("Main")
        
    Activity.Title = "RC hangar - Models list"
       
    '    LoadListModel 'Forse è meglio metterlo in Resume? da testare
       
       

       
        
    ToastMessageShow("if there are no models here, click on add model button",True)
        
    'MsgboxAsync("se non ci sono modelli inseriscili cliccando sul pulsante + in basso a destra", "Ecco il tuo Hangar")
    End Sub

    Sub Activity_Resume
        LoadListModel             
    'per ora sta in Create da testare
       
        ModelViewPanel.Visible = 
    False
       
    End Sub

    Sub Activity_Pause (UserClosed As Boolean)

    End Sub



    Sub addPlusButton_Click
        
    StartActivity(AggiungiModello)
    End Sub

    Sub LoadListModel
       
        ListModelView.Clear
       
        
    Dim List1 As List
       
        
    'controllo se esiste il file di testo
        If File.Exists(File.DirRootExternal, "RCHangar/ListModel.txt"Then
            
    'se il file esiste carico i dati dal file di testo
            List1 =File.ReadList(File.DirRootExternal, "RCHangar/ListModel.txt")
           
            
    Dim Bitmap1 As Bitmap
           
            
    For i = 0 To 99
               
                ListModel(i) = List1.Get(i)
                
    'creo un mini array con tutte le parti della riga esaminata
                Dim stringArray() As String = Regex.Split("\|",ListModel(i))
           
                
    If ListModel(i) <> "0" Then
               
                    
    Dim lvd As ListViewData
                    lvd.Initialize
               
                    Bitmap1.Initialize(
    File.DirAssets, "planeApp.png")
               
                    lvd.FirstRow = stringArray(
    0)
                    lvd.SecondRow = 
    "Efficiente/In Manutenzione" 'Lo implementerò successivamente con un boolean
                    lvd.Picture = Bitmap1
               
                    ListModelView.AddTwoLinesAndBitmap2(lvd.FirstRow,lvd.SecondRow,lvd.Picture, lvd)
                    
    ' imposto i colori
                    ListModelView.TwoLinesAndBitmap.Label.TextColor = Colors.RGB(0,0,0)
                    ListModelView.TwoLinesAndBitmap.SecondLabel.TextColor = 
    Colors.RGB(254,0,0)
               
                    ListModelView.TwoLinesAndBitmap.ItemHeight = 
    80dip
               
               
               
                
    End If
           
            
    Next
           
        
    End If
       
    End Sub

    Sub ListModelView_ItemClick (Position As Int, Value As Object)
       
        addPlusButton.Visible = 
    False
       
        
    Dim ListTemp As List
       
        
    'controllo se esiste il file di testo
        If File.Exists(File.DirRootExternal, "RCHangar/ListModel.txt"Then
            
    'se il file esiste carico i dati dal file di testo
            ListTemp =File.ReadList(File.DirRootExternal, "RCHangar/ListModel.txt")
           
        
    End If
       
        
    Dim stringTemp As String = ListTemp.Get(Position)
       
        
    Dim stringArray() As String = Regex.Split("\|",stringTemp)
       
        ModelName = stringArray(
    0)
        Component1 = stringArray(
    1)
        Component2 = stringArray(
    2)
        Component3 = stringArray(
    3)
        Component4 = stringArray(
    4)
        Component5 = stringArray(
    5)
        Component6 = stringArray(
    6)

        ModelViewPanel.Visible = 
    True
       
        ModelnameLabel.Text = ModelName
        Component1Label.Text = Component1
        Component2Label.Text = Component2
        Component3Label.Text = Component3
        Component4Label.Text = Component4
        Component5Label.Text = Component5
        Component6Label.Text = Component6
    End Sub


    'Sub ListModelView_ItemClick (Position As Int, Value As Object)
    '  
    '    addPlusButton.Visible = False
    '  
    '    Dim ListTemp As List
    '  
    '    'controllo se esiste il file di testo
    '    If File.Exists(File.DirRootExternal, "RCHangar/ListModel.txt") Then
    '        'se il file esiste carico i dati dal file di testo
    '        ListTemp =File.ReadList(File.DirRootExternal, "RCHangar/ListModel.txt")
    '      
    '    End If
    '  
    '    Dim stringTemp As String = ListTemp.Get(Position)
    '  
    '    Dim stringArray() As String = Regex.Split("\|",stringTemp)
    '  
    '    ModelName = stringArray(0)
    '    If stringArray(0)<>("") Then
    '        ModelnameLabel.Text = ModelName
    '    Else
    '        BackModelWiewButton_Click
    '    End If
    '  
    '    Component1 = stringArray(1)
    '    If stringArray(1)<>("") Then
    '        Component1Label.Text = Component1
    '        Else
    '        Component1Label.Text = ""
    '    End If
    '  
    '    Component2 = stringArray(2)
    '    If stringArray(2)<>("") Then
    '        Component2Label.Text = Component2
    '    Else
    '        Component2Label.Text = ""
    '    End If
    '      
    '    Component3 = stringArray(3)
    '    If stringArray(3)<>("") Then
    '        Component3Label.Text = Component3
    '    Else
    '        Component3Label.Text = ""
    '    End If
    '      
    '    Component4 = stringArray(4)
    '    If stringArray(4)<>("") Then
    '        Component4Label.Text = Component4
    '    Else
    '        Component4Label.Text = ""
    '    End If
    '      
    '    Component5 = stringArray(5)
    '    If stringArray(5)<>("") Then
    '        Component5Label.Text = Component5
    '    Else
    '        Component5Label.Text = ""
    '    End If
    '      
    '    Component6 = stringArray(6)
    '    If stringArray(6)<>("") Then
    '        Component6Label.Text = Component6
    '    Else
    '        Component6Label.Text = ""
    '    End If
    '
    '
    '    ModelViewPanel.Visible = True
    '  
    '
    'End Sub



    Sub BackModelWiewButton_Click
        ModelViewPanel.Visible = 
    False
        addPlusButton.Visible = 
    True
    End Sub

    Questo crasha quando clicco su di un NameModel che non possiede tutti i campi compilati.
    Commentata c'è una Sub ListModelView_ItemClick con cui ho tentato di ovviare al problema, ma la mia logica non ha dato frutti Crasha comunque.
     
  2. Sagenut

    Sagenut Active Member Licensed User

    Quale riga provoca l'errore?
    Quale errore ti dà?
    Se vuoi riprovare con l'altra Sub modifica i vari
    Code:
    If stringArray(0)<>(""Then
    in
    Code:
    If stringArray(0)<>"" Then
     
  3. Luigi S

    Luigi S Member Licensed User

    Questo è lerrore della prima sub

    Code:
    *** Service (starter) Create ***
    ** 
    Service (starter) Start **
    ** 
    Activity (main) Create, isFirst = true **
    ** 
    Activity (main) Resume **
    main_listmodelview_itemclick (java line: 
    482)
    java.lang.ArrayIndexOutOfBoundsException: length=
    1; index=1
        at org.tuttovola.RCHangar.main._listmodelview_itemclick(main.java:
    482)
        at java.lang.reflect.Method.invoke(Native Method)
        at anywheresoftware.b4a.BA.raiseEvent2(BA.java:
    196)
        at anywheresoftware.b4a.BA$
    1.run(BA.java:335)
        at android.os.Handler.handleCallback(Handler.java:
    873)
        at android.os.Handler.dispatchMessage(Handler.java:
    99)
        at android.os.Looper.loop(Looper.java:
    193)
        at android.app.ActivityThread.main(ActivityThread.java:
    6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:
    493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:
    858)

    Questo è lerrore che dà la seconda sub in cui ho aggiunto il ciclo if

    Code:
    *** Service (starter) Create ***
    ** 
    Service (starter) Start **
    ** 
    Activity (main) Create, isFirst = true **
    ** 
    Activity (main) Resume **
    main_listmodelview_itemclick (java line: 
    490)
    java.lang.ArrayIndexOutOfBoundsException: length=
    1; index=1
        at org.tuttovola.RCHangar.main._listmodelview_itemclick(main.java:
    490)
        at java.lang.reflect.Method.invoke(Native Method)
        at anywheresoftware.b4a.BA.raiseEvent2(BA.java:
    196)
        at anywheresoftware.b4a.BA$
    1.run(BA.java:335)
        at android.os.Handler.handleCallback(Handler.java:
    873)
        at android.os.Handler.dispatchMessage(Handler.java:
    99)
        at android.os.Looper.loop(Looper.java:
    193)
        at android.app.ActivityThread.main(ActivityThread.java:
    6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:
    493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:
    858)
    ma ripeto, succede solo se clicco su di un NameModel a cui non sono riempiti tutti i component
     
  4. Sagenut

    Sagenut Active Member Licensed User

    Per risolvere devi mettere uno spazio tra i segni di separazione.
    Quindi le stringhe vuote devono essere
    Code:
    stringa = " | | | | | | "
    o comunque i valori nulli devono essere uno Spazio.
    Dovrai trasformare i valori "" in " " in fase di salvataggio.

    P.S.= Il perchè di tutto ciò non te lo sò spiegare al momento.
     
    Last edited: Aug 26, 2019
    Luigi S likes this.
  5. Luigi S

    Luigi S Member Licensed User

    Si il problema è proprio quello, anche se in realtà non è bastato, ho dovuto aggiungere un | alla fine cosi

    Code:
    ListModel.set(i,ModelName.Text &" |"& Component1.text &" |"& Component2.text &" |"& Component3.text &" |"& Component4.text &" |"& Component5.text &" |"& Component6.text &" |")
    in questo modo anche se non scrivi nulla in nessun campo no crasha e questo per me è sufficiente, tanto dovrò implementare il "Delete" per cancellare completamente la riga.

    Grazie mille!
     
    Sagenut likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice