Italian App ListaItaliani

AlpVir

Well-Known Member
Licensed User
Longtime User
Aderendo ad un'idea di Ivano Monti ho realizzato una app che :
- Legge la prima pagina del post "Lista italiani"
- Rielabora il contenuto e visualizza i dati in una griglia scrollabile

Così com'è l'app in questione serve a poco o a niente, ma con qualche miglioramento si può fare qualcosa che può essere utile.
Ad esempio :
a) ordine alfabetico di città
b) selezionando una riga appare una videata con una serie di informazioni relative alla persona selezionata
Occorre però un database in cui memorizzare queste informazioni, che dovranno necessariamente essere immesse dalle singole persone; ne consegue che dovrà esserci un archivio di utenti, con tanto di username e password: sempre più complicato !
Tutto fattibile ma ... ci vuole tempo.

La mia è stata più che altro una esercitazione in una giornata di tempo uggioso.
In allegato l'app in questione.
 

Attachments

  • ListaItaliani2.zip
    131.8 KB · Views: 293

ivanomonti

Expert
Licensed User
Longtime User
bene e sempre un inizio, domani la provo in ufficio e posso dare il mio contributo, magari anche un db remoto per inserire i dati e poi sincronizzarli.
 

ivanomonti

Expert
Licensed User
Longtime User
dovresti condividere anche il progetto., mi da errore java line 506 sembra che non connette
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Ecco l'intero progetto

B4X:
'------------------------------------------------------
'  ListaItaliani2  Ugo Bottari (AlpVir) - 29/9/2013
'------------------------------------------------------
'
'  Legge la pagina del forum di B4A che contiene il post con la lista degli italiani
'  Rielabora il contenuto della pagina e visualizza i dati in una griglia. Tutto qui !
'
'  Ovviamente la pagina di "fiaful" in questione deve essere sempre formattata allo stesso identico modo, pena il
'  fallimento della procedura. "fiaful" ne deve terer conto. Magari potrebbe iniziare l'elenco con un
'  <font color="#FF0000"><b>LISTA ITALIANI</font></b>
'  e terminare con un
'  <font color="#FF0000"><b>FINE ELENCO</font></b>
'
'  Possibili miglioramenti :
'  a) ordine alfabetico di città
'  b) selezionando una riga appare una videata con una serie di informazioni relative alla persona selezionata
'      Occorre però un database in cui memorizzare queste informazioni, che dovranno essere immesse dalle singole persone.
'      Possibili campi di questo db :
'      ID, Nome e cognome, Email, Sito, password, username di B4A, Note (campo memo in cui ciascuno memorizza quello che vuole)
'
'  Maxi miglioramento : la pagina di cui sopra servirebbe SOLO all'importazione dei suoi dati (della pagina cioè) in un db remoto
'  La visualizzazione all'interno dell'app sarebbe deputata ad un codice quasi del tutto diverso che non fa il parsing di una
'  pagina HTML ma legge un db remoto. Se si fa trenta si può fare anche trentuno; in altre parole se si crea un db remoto tanto vale
'  aggiungerci i dati prelevati dalla pagina del forum.
'
'  L'icona dell'app potrebbe essere il simbolo del B4A soprapposto al tricolore.
'
'  NOTA : Tutto fattibile ma ... ci vuole tempo
'
'  Librerie necessarie: HTTP 1.26 e xnObjects 2.22
'
'-----------------------------------------------------------------------------------------

Sub Process_Globals
  Dim hc As HttpClient
End Sub

Sub Globals
      hc.Initialize("hc")      ' client http
    Dim Tutto As String      ' l'intera pagina HTML in una stringa
    Dim gg As xnGrid          ' griglia
End Sub

Sub LeggiFile
    '--- Leggo il file TXT che ho creato una volta per tutte.
    '    In questo modo evito i dovermi collegare ogni volta alla pagina originale.
    '
    Dim resultString As String
    Dim Riga As String
    Dim Tutto As String
    '  
    Dim TextReader1 As TextReader
    Dim Line As String
    TextReader1.Initialize (File.OpenInput (File.DirRootExternal , "ListaItaliani.txt"))
    Line =TextReader1.ReadLine
    Do While Line <> Null
        Line =TextReader1.ReadLine
        If Line<> Null Then
            If Line <> Null Then
                Riga=Line.Trim
                If Riga<>"" Then
                      Tutto = Tutto & Riga
                End If
            End If
        End If
    Loop
    TextReader1.Close
End Sub

Sub Elabora
    '--- Leggo la variabile stringa Tutto e faccio il parsing, individuando i 3 campi Regione, Nome, Citta
    '
    Dim I1 As Int, I2 As Int, I3 As Int, I4 As Int    
    Dim ele()      As String  ' array
    Dim Regione    As String
    Dim Nome      As String
    Dim Citta      As String
    Dim PrecRegione As String  ' per evitare la visualizzazione ripetuta della regione; appare una volta sola
    '
    I1 = Instr(Tutto,"<b>Abruzzo",0)'            ' inizia da qui
    I2 = Instr(Tutto,"Vicini vicini",0)          ' e finisce qui, escludendo gli svizzeri
    Tutto = Mid(Tutto,I1,I2-I1)
    Log ("RISULTATI")
    ele = Regex.Split("<br />",Tutto)
    For i = 0 To ele.Length -1
        S = ele(i).Trim
        If S.Trim <>"" Then
            If Instr(S,"</b>",0) > 0 Then
                S = S.Replace("<b>","") : S = S.Replace("</b>","") : S= S.Replace ("<br />","")
                Regione = S
            Else
                S = S.Replace("-","")
                  S =  S.Replace ("<br />","")
                Nome = S.Trim
                I3 = Instr(Nome,"(",0)
                If I3>0 Then
                    Nome = Left(Nome,I3)
                    Nome = Nome.Trim
                    I4 = Instr(S,")",0)
                    If I4 > 0  Then
                        Citta = Mid(S,I3+1,s.Length-I3-1)
                        Citta = Citta.Replace ("(","")
                        Citta = Citta.Replace (")","")
                    Else
                        Citta = ""
                    End If  
                Else
                    Citta = ""
                End If
                If Nome<>"" AND Citta<>"" Then
                    If PrecRegione=Regione Then Regione=""
                    AggiungiRiga (Regione,Nome,Citta)
                    PrecRegione=Regione
                End If  
            End If
        End If
    Next
    gg.Scrolltop
End Sub  

Sub Activity_Create(FirstTime As Boolean)
  ProgressDialogShow ("Attendere")
  Activity.Title = "LISTA ITALIANI DEL FORUM B4A"
  If gg.IsInitialized = False Then
        gg.Initialize("gg")
        gg.RowHeight = 24dip
        gg.HeaderHeight = 30dip
        gg.HeaderTextSize = 13
        gg.RowTextSize = 13
        gg.HeaderTextColor = Colors.Yellow
        gg.RowTextColor = Colors.Yellow
        gg.SelectedOddColor = Colors.Magenta
        gg.SelectedEvenColor = Colors.Magenta
        Dim cc(4) As xnGridCol
        cc(0).Initialize2 ( "Regione" ,  "Reg" , 30%x , Gravity.Left ) : gg.ColAppend (cc(0))
        cc(1).Initialize2 ( "Nome" , "Nom" , 30%x , Gravity.Left)      : gg.ColAppend (cc(1))
        cc(2).Initialize2 ( "Citta" , "Cit" , 30%x , Gravity.Left)    : gg.ColAppend (cc(2))
        Activity.AddView (gg,4dip, 10dip, 100%x, 100%y)
        gg.Multiselect = False
        gg.GridWidth = 1dip
        gg.GridColor = Colors.white
        gg.PixelFix = False
        gg.GridCreate2 ( False )
    End If

  '--- se si compila usare solo questa linea
  GetWebPage

  
  '--- se viceversa si è in fase di collaudo (ossia si legge il file TXT) usare le due righe seguenti :
  ' LeggiFile
  ' Elabora
  ProgressDialogHide
End Sub

Sub AggiungiRiga (Reg As String ,Nom As String ,Cit As String)
    gg.RowAppend (Array As String (Reg,Nom,Cit))
    Log ("Regione=" & Reg & " Nome=" & Nom &  " Città=" & Cit)
End Sub

Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub

Sub GetWebPage
  Dim req As HttpRequest        
  Dim PostUrl As String                
  PostUrl ="http://www.b4x.com/android/forum/threads/lista-italiani.28596/"
  req.InitializeGet(PostUrl)      
  ProgressDialogShow("Attendi ... ")                
  hc.Execute(req, 1)
End Sub

Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int)      
    Dim resultString As String

    resultString = Response.GetString("UTF8")
    '--- se si compila commentare la linea seguente
    'File.WriteString (File.DirRootExternal,"ListaItaliani.txt",resultString)
    Response.Release
    Tutto=resultString
    Elabora
End Sub


Sub hc_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)      'No connection :-(
    Log("Errore nella connessione : " & Reason & " " & StatusCode)
    If Response <> Null Then
        Log(Response.GetString("UTF8"))
        ProgressDialogHide
        Response.Release
    End If
End Sub

Sub Instr(Text As String, TextToFind As String, Start As Int) As Int
  Return Text.IndexOf2(TextToFind,Start)
End Sub

Sub Mid(Text As String, Start As Int, Length As Int) As String
  If Length>0 AND Start>-1 AND Start< Text.Length Then Return Text.SubString2(Start,Start+Length)
End Sub

Sub Left(Text As String, Length As Long)As String
    If Length>Text.Length Then Length=Text.Length
    Return Text.SubString2(0, Length)
End Sub
Sub Right(Text As String, Length As Long) As String
    If Length>Text.Length Then Length=Text.Length
    Return Text.SubString(Text.Length-Length)
End Sub
dovresti condividere anche il progetto., mi da errore java line 506 sembra che non connette
 

ivanomonti

Expert
Licensed User
Longtime User
dove trovo la libreria, in b4a ho fatto la ricerca ma non la trovo... mi passeresti il link o la lib.
 

ivanomonti

Expert
Licensed User
Longtime User
ecco un possibile errore, io ho messo la try e l'errore e quanto segue: "Errore nella connessione : 200

B4X:
Sub hc_ResponseSuccess (Response As HttpResponse, TaskId As Int) 
  Dim resultString As String
  Try
    resultString = Response.GetString("UTF8")
  '--- se si compila commentare la linea seguente
  'File.WriteString (File.DirRootExternal,"ListaItaliani.txt",resultString)
    Response.Release
    Tutto=resultString
    Elabora
  Catch
    Log("Errore nella connessione : " & Response.StatusCode)
  End Try
End Sub
 

AlpVir

Well-Known Member
Licensed User
Longtime User
La libreria xngrid è di Stefano Busetto (tanto per stare sempre in Italia !). Io ho usato la 2.22 ma adesso c'è la 2.25.
Ecco il link
http://www.b4x.com/android/forum/threads/grid-library.16381/
Riguardo l'errore di connessione a me non è mai capitato; uso sia l'emulatore che un device reale collegato via wifi.
 

ivanomonti

Expert
Licensed User
Longtime User
Ecco qui un mio progetto, manca solo di capire come mettere il db remoto o possibile xml da qualche parte... e solo uno spunto.

Nuova versione con tasti telefona, mail, navigate.
 

Attachments

  • B4ALItalia.zip
    448.5 KB · Views: 285
  • img01.png
    img01.png
    83.2 KB · Views: 344
  • img02.png
    img02.png
    101.9 KB · Views: 348
Last edited:

ivanomonti

Expert
Licensed User
Longtime User
La libreria xngrid è di Stefano Busetto (tanto per stare sempre in Italia !). Io ho usato la 2.22 ma adesso c'è la 2.25.
Ecco il link
http://www.b4x.com/android/forum/threads/grid-library.16381/
Riguardo l'errore di connessione a me non è mai capitato; uso sia l'emulatore che un device reale collegato via wifi.

Non mi va ne su emulatore ne su note2 con android originale 4.1.2 bho, vediamo se altri hanno preso e provato.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Non mi va ne su emulatore ne su note2 con android originale 4.1.2 bho, vediamo se altri hanno preso e provato.
Mi stupisce molto. Sono istruzioni assai basilari, nulla di trascendentale ...
 

ivanomonti

Expert
Licensed User
Longtime User
no sono io l'imbecille ... ora funziona ma sul mio note2 no mi da sempre lo stesso errore... cmq i dati relativi a questa lista sono limitati andrebbero messi i dati completi... guarda la mia proposta, vediamo insieme come poter memorizzare i dati in remoto e poi rilasciamo al prima demo... che ne dici.
 

Attachments

  • 2013-09-30_140915.png
    2013-09-30_140915.png
    101.9 KB · Views: 345

ivanomonti

Expert
Licensed User
Longtime User
ok ragazzi ho preso decisione si usa xml e via, ora la nuova versione legge sul mio sito il file xml che poi memorizza nel vostro dispositivo e lo visualizza, tutto il resto rimane invariato...

Xml prevede dati in più per il futuro

<--------- struttura xml -------->

B4X:
<SERVICELIST>
<Category>Ivano Monti</Category>
<Denominazione>Senior Developer for Android</Denominazione>
<Indirizzo>Via del commercio, 2 Solaro Italia</Indirizzo>
<CAP>20020</CAP>
<Comune>Solaro</Comune>
<Lat>0</Lat>
<Lon>0</Lon>
<Google>Via del commercio, 2 Solaro Italia</Google>
<Telefono>+393929824007</Telefono>
<Email>[email protected]</Email>
<Url>www.ivanomonti.eu</Url>
<Sito>www.ivanomonti.eu</Sito>
<Note>Nessuna nota presente</Note>
<Extra1>No extra 1</Extra1>
<Extra2>No extra 2</Extra2>
<Extra3>No extra 3</Extra3>
</SERVICELIST>


<------------------------------------------------>

link http://www.ivanomonti.eu/C2013_IVANOMONTI/B4ALItalia.xml
 

AlpVir

Well-Known Member
Licensed User
Longtime User
La lista di fiaful è tutto quanto si poteva fare all'interno del forum. E' già meritoria l'opera di costui !
Converrai con me che in un forum non si può fare di più; in altre parole i dati specifici di ciascuno (email, telefono, capacità tecniche, recapiti, specializzazioni, lavori effettuati, disponibilità, ecc. ecc.) non possono trovar spazio in un forum.
Devono stare in un db remoto ed essere richiamati dall'app.
Fino a qui tutto molto chiaro ed evidente, spero.
Ho già visto la tua proposta di "scheda" e mi sembra valida. Si tratta di memorizzare quei dati in un db remoto consultabile da chiunque, lanciata l'app, clicchi su una riga. Manca però (mi sembra di ricordare) un pulsante che consente di accedere ad una ulteriore videata con un EditText "password".
Superato lo scoglio della password (e questo lo può fare solo il programmatore proprietario della riga, se così si può dire) costui ha una serie di Edit text specifici in cui memorizzare i vari tipi di dati già citati. Oppure, più semplicemente ma - a mio giudizio - più efficacemente, un solo EditText (a cui corrisponde nel db un campo memo) in cui scrivere nel formato HTML tutto quello che vuole, nei colori e con il risalto che vuole. A questo punto si sarà capito che sarà un webview a dover visualizzare questo "maxi campo".
Non bisogna dimenticare un qualche sistema di gestione delle password, accoppiate biunivocamente con gli username.
Io ho un sito (www.lalpinistavirtuale.it) che ha un database di utenti i quali possono inserire e/o modificare dei dati (relativi allo scialpinismo of course).
Potrei, al limite, "costringere" o meglio inviare i programmatori che lo desiderato ad iscriversi nel mio sito e poi l'app chiederebbe autorizzazione al mio sito per accedere alla pagina di inserimento/modifica dei dati personali. Poi esisterebbe un db (sempre MSAccess) in cui memorizzare di dati più volte citati. Si tratta però di una commistione di "mission" che non mi piace molto e manca quella "eleganza" che dovrebbe contraddistinguere ogni buona soluzione informatica.
In conclusione, nella mia fervida (lo dico ironicamente) mente è tutto chiaro, ma al momento non posso impegnarmi visto che vorrei completare un'app un po' particolare che mi sta facendo dannare alquanto. Si tratta, come forse tu sai, di qualcosa legato al soccorso sanitario e non solo, ma "più non dimandare".

EDIT: mentre scrivevo quanto sopra riportato tu forse mi hai superato con il tuo XML. Stasera guardo e poi ti dico.
 

ivanomonti

Expert
Licensed User
Longtime User
Qui avete i sorgenti del progetto finito, lettura online del file xml, crazione array con tutti i dati, questo voluto per avere la possibilità di eventuali eventi particolari, tipo invia email prende solo email, localizza prende i dati indirizzo e così via.

Xml verrà aggiornato man mano che arrivano le richieste di inserimento nell'app stessa, ma i dati devono essere completi almeno nella minima parte
1) nome e cognome
2) descrizione "Senior developer Android" esempio
3) telefono
4) email
5) indirizzo (via città e nazione)

usate questo codice sostituendo i valori con i vostri e inviatemi email
B4X:
<SERVICELIST>
<Category>Ivano Monti</Category>
<Denominazione>Senior Developer for Android</Denominazione>
<Indirizzo>Via del commercio, 2 Solaro Italia</Indirizzo>
<CAP>20020</CAP>
<Comune>Solaro</Comune>
<Lat>0</Lat>
<Lon>0</Lon>
<Google>Via del commercio, 2 Solaro Italia</Google>
<Telefono>+393929824007</Telefono>
<Email>[email protected]</Email>
<Url>www.ivanomonti.eu</Url>
<Sito>www.ivanomonti.eu</Sito>
<Note>Nessuna nota presente</Note>
<Extra1>No extra 1</Extra1>
<Extra2>No extra 2</Extra2>
<Extra3>No extra 3</Extra3>
</SERVICELIST>


Tutti gli altri dati possono essere saltati in quanto per ora non vengono visualizzati.

app sarà in grado di leggere lista xml da remoto, popolare una listview, chiamare il contatto selezionato, inviare email al contatto selezionato e avviare Google map all'indirizzo dello stesso.

ALERT:

manca il logo e i crediti li vedete voi, il sorgente e aperto e semplice e riutilizzabile.

Le librerie sono

1) Core
2) Http
3) ModularMenu
4) Phone
5) xmlSax

Se avete altro da chiedere basta un click, mi piacciono i commenti :)
 

Attachments

  • B4ALItalia.zip
    480 KB · Views: 259

AlpVir

Well-Known Member
Licensed User
Longtime User
Ci vuole anche la libreria AnimationPlus, vero ?
Tutto OK tranne che, premendo il tasto menu appare il messaggio "Interruzione imprevista ..." con quel che segue.
Probabilmente il fatto è legato ai due metadati FullScreen or IncludeTitle. Non sono stato ad indagare molto però.
Ho visto che hai scelto di non utilizzare i dati della lista di fiaful; peccato !

Installing file.
** Activity (main) Pause, UserClosed = false **
PackageAdded: package:b4a.example
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
(Main, 43) FullScreen or IncludeTitle properties in layout file do not match the activity attributes settings. (warning #1004)
main_activity_keypress (B4A line: 81)
If KeyCode = KeyCodes.KEYCODE_MENU Then Menu.keyMenuPress
java.lang.NoClassDefFoundError: flm.b4a.animationplus.AnimationSet
at dominex.modularmenu.modularmenu._resizemenu(modularmenu.java:434)
at dominex.modularmenu.modularmenu._showmenu(modularmenu.java:595)
at dominex.modularmenu.modularmenu._keymenupress(modularmenu.java:252)
at b4a.example.main._activity_keypress(main.java:283)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
at b4a.example.main.onKeyDown(main.java:156)
at android.view.KeyEvent.dispatch(KeyEvent.java:1390)
at android.app.Activity.dispatchKeyEvent(Activity.java:2137)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1901)
at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2663)
at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2638)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1872)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3806)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
** Activity (main) Resume **
 

ivanomonti

Expert
Licensed User
Longtime User
Ci vuole anche la libreria AnimationPlus, vero ?
Tutto OK tranne che, premendo il tasto menu appare il messaggio "Interruzione imprevista ..." con quel che segue.
Probabilmente il fatto è legato ai due metadati FullScreen or IncludeTitle. Non sono stato ad indagare molto però.
Ho visto che hai scelto di non utilizzare i dati della lista di fiaful; peccato !

NO animation, e per i dati della lista sono troppo incasinati, meglio ripartire da capo, sarebbe bene facessimo Tam Tam o cosa del genere... chi fa Icona :)

Sono accettate anche modifiche o aggiunte... mi piarebbe vedere anche la vostra partecipazione.
 

PakoT52

Active Member
Licensed User
Longtime User
Per la grafica posso darvi una mano io . Basta che mi dite cosa volete e se avete esigenze :)
 

ivanomonti

Expert
Licensed User
Longtime User
Per la grafica posso darvi una mano io . Basta che mi dite cosa volete e se avete esigenze :)

Al momento serve icona dell'app stessa, poi non so anche perchè al momento non cè molto, anche se oggi pensavo di implementare altre viste, io sono per minimale come avrai visto nella mia impostazine... Parliamone.

Inoltre mi piacerebbe inserire post su facebook, twitter e g+ insomma altro utile, nello stesso tempo rendere il codice e il progetto open source e libero a tutti coloro che si iscrivono al progetto bla bla bla.
 

PakoT52

Active Member
Licensed User
Longtime User
Al momento serve icona dell'app stessa, poi non so anche perchè al momento non cè molto, anche se oggi pensavo di implementare altre viste, io sono per minimale come avrai visto nella mia impostazine... Parliamone.

Inoltre mi piacerebbe inserire post su facebook, twitter e g+ insomma altro utile, nello stesso tempo rendere il codice e il progetto open source e libero a tutti coloro che si iscrivono al progetto bla bla bla.
Capito , io posso darvi un mano dal punto di vista grafico , dato che dal punto di vista della programmazione sono ancora ai piedi della montagna . Adesso mi metto a lavoro per fare un icona , hai/avete preferenze ? O posso fare di mia libera scelta ? Qual'è il nome dell'app ?
Ps: Ho realizzato un idea che avevo per l'icona , non tenete conto dei difetti .
 

Attachments

  • IconaByPako.png
    IconaByPako.png
    74.2 KB · Views: 251
Last edited:
Top