Italian Problemi con array di imageview

Oldmanenzo

Member
Licensed User
Longtime User
le ho provate veramente di tutte, o almeno credo ma l'errore e sempre lo stesso.
tramite query prelevo un record dal server, un campo della query contiene i servizi (bar, market, piscina etc) divise da virgole e tramite regex.split mi creo una variabile dimensionale con tutti i contenuti.
fin qui tutto bene e qui iniziano i problemi
creo inizialmente un array di img tramite il lenght della variabile. Queste immagini devono essere inserite in un panel. Il problema viene fuori quando devo caricare l'immagine (bitmap). La prima viene caricata, la seconda mi dice che il file non è trovato. Mi sono scervellato l'errore nel nome del file, ma non vi era errore, quindi per sicurezza ho cambiato il primo nome con il secondo e puntualmente al secondo ciclo mi dice che non trova il file dell'immagine.
A questo punto leggendo un po in giro, ho provato a creare una lista di immagini come da codice postato (II versione) ma l'errore si ripresenta sia quando carico la lista aggiungendo
Img.Bitmap =LoadBitmap(File.DirAssets ,servizi(j) &".png")
sia quando eseguo il ciclo per caricare le immagini che provengono dalla lista nel panel.
Sinceramente non so come fare e non ho piu idee. Qualche conflitto si crea, quello che mi sovviene puo essere solo un conflitto di nomi delle immagini che si chiamano tutte "img", ma mi sembra talmente innaturale dover dichiarare anche 20 img con nomi differenti per poterli utilizzare.
Ditemi che sto sbagliando da qualche parte e che sono talmente stupido da non vederlo nonostante in debug il codice venga eseguito fino a che non cerco di caricare la seconda immagine, ma io mi arrendo

B4X:
Sub CreateImage(parser As JSONParser )
    Dim COUNTRIES As List
    COUNTRIES = parser.NextArray 'returns a list with maps
    Dim m As Map
    m=COUNTRIES.Get (0)
    Dim servizi(), testo As String
    Dim testo As String=m.Get("Servizi")
    servizi=Regex.Split (",", testo)
    Dim valuex, valuey As Int
    valuex=7dip: valuey=5dip
    ImgList.Initialize
    For j=0 To servizi.Length -1
        Dim Img As ImageView
        Img.Initialize ("img")
        Img.Bitmap =LoadBitmap(File.DirAssets ,servizi(j) &".png")  VIENE ESEGUITA QUESTA O
        ImgList.Add (Img)
    Next
    LblNome.Text=m.Get ("Nome")
    LblIndirizzo.Text =m.Get("Indirizzo")
    cd.Initialize(Colors.Black , 5dip)
    Pnl.Background =cd
    Pnl.Color =Colors.White
    For n=0 To servizi.length -1
        Dim Img As ImageView
        Img=ImgList.get(n)
        Img.Gravity =Gravity.FILL
'        Img.Bitmap =LoadBitmap(File.DirAssets ,servizi(n) &".png") --------------QUESTA-----------
        Pnl.AddView (Img, valuex, valuey, 30dip, 30dip)       
        Img.Tag =n
        If n=9 Then
            valuex=7: valuey=40
        End If
    Next
   
End Sub
 

LucaMs

Expert
Licensed User
Longtime User
Se i file non si trovano, metti un log del percorso.
Poi, nel ciclo di caricamento nel pannello, tu non incrementi valuex né valuey.

(il campo di database da "splittare" non è proprio l'ideale, benché possa funzionare: sarebbe meglio una tabella separata con una chiave esterna - Foreign Key)
 

Oldmanenzo

Member
Licensed User
Longtime User
Ciao Luca
tutti i file delle immagini sono presenti nel designer del layout, come gia detto se cambio l'ordine la prima va sempre bene la seconda va sempre in errore, quindi non è una questione ne di nomi ne di percorso
valuex non aumenta perche tra le tante prove e riprove che ho fatto ho dimenticato di metterla dopo
Img.tag=n
valuex=valuex+35
quel if n=9 then
serve a posizionare le seconde 10 img nella seconda fila infatti valuey aumenta di 40 su top
per quanto riguarda lo splittare o meno un campo questo non lo so, resta il problema che non riesco a caricare la seconda immagine e presuppongo
che anche avendo una tabella separata il problema non cambia
 

Oldmanenzo

Member
Licensed User
Longtime User
provo ad inserire il problema in area Inglese (mi vengono sempre i brividi) e vediamo cosa ne viene fuori
 

udg

Expert
Licensed User
Longtime User
Hai provato a verificare se il nome ritornato dalla query sia identico a quello nel DirAssets?
Mi sembra di ricordare che maiuscole/minuscole faccia differenza.

udg
 

Oldmanenzo

Member
Licensed User
Longtime User
controllato e fa la differenza, comunque ammettiamo che le prime 2 voci siano (bar, market)
quando carica market va in errore
se cambio l'ordine (market, bar)
bar va in errore, quindi non vi è un'errore ne nei nomi ne nella memorizzazione di DirAssets
ma semplicemente perche la testa gli ha detto che la seconda voce deve andare in errore:mad::mad::mad:
 

Oldmanenzo

Member
Licensed User
Longtime User
Luca saro infelice a spiegarmi, ma mi sembra anche di aver detto che ho cambiato nel db l'ordine dei nomi e va in errore al secondo caricamento
indipendentemente dal nome.
Se la prima volta (bar) in prima posizione perche non lo trova in seconda posizione, il nome non cambia
 

udg

Expert
Licensed User
Longtime User
Mi sa che il problema nasce prima di arrivare al caricamento delle immagini.
Prova a mettere dei log sugli elemnti di base, ad esempio:
Log(parser) ' per vedere cosa arriva dal server
Log(m)
Log(testo)
Log(servizi)
Ritornano tutti i valori che ti aspetti?

ps: la variabile testo la dichiari 2 volte, ma questa non è la causa del problema.
 

Oldmanenzo

Member
Licensed User
Longtime User
Ragazzi l'errore è stato trovato e la risposta FileNotFound era esatta. Errore sicuramente stupido ma a volte veramente non vai a pensare ad un fatto del genere
la colonna nel database contiene questi dati
bar, market, cinema, lavaggio....................etc
con regex.spilt (",".........)
tiro fuori esattamente quello che dovrebbe tirare
ovvero
bar (senza spazio iniziale)
mentre tutti gli altri hanno uno spazio iniziale
quindi ecco il motivo per cui il primo andava sempre bene mentre dal secondo in poi andava in errore
perche il nome dell'immagine non ha uno spazio iniziale.
Errore sicuramente stupido
 
Top