[ITA] arduino forum app test/development

[placeholder, will post code soon]
[Warning]: This is my first attempt into Android programming, although I'm a skilled java programmer.

In this post you can actually find the latest "android SDK" (aka "eclipse on andro-steroid") workspace.
NEW: you can also find the apk for the READER!!! (WARNING: no login-post actually)

some screenshot added at 2013-2-26 (newer screenshot are in older post)

principale1.png

principale2.png

NewArduinoForum10-4-2013.zip (1.34 MB)

Stato attuale:

stiamo partendo da 0.
doipo aver sbattuto la testa sulla ListView che non ne vuole sapere di essere dinamica, ora uso una ScroolView che contiene un LinearLayout.

i messaggi pensavo di usare un relativeLayout, vediamo come viene

x completezza dal vecchio post da cui tutto ebbe inizio: http://arduino.cc/forum/index.php/topic,148630.15.html

Ogni messaggio inizia con il tag

Quote

dove ovviamente il numero cambia. ottimo per saltare l'html inutile e arrivare dove ci interessa

poi ci serve il tag
Quote

che contiene il nome, link al profilo e immagine utente (metterei solo il nome e il link che apre il browser)

Quote

per il link all'aggiunta karma. Direi bottone che esegue la get "di nascosto", senza passare da browser o altro, giusto un popup per dire errore/ok

Quote

titolo del post

Quote

per la data del post

Quote

contenuto del post

Quote

firma dell'utente (non la metteri)

Quote
Report to moderator  
come si può notare l'url per il report è facile da costruire, più che estrarla, e direi che apre il browser (tanto è una cosa che si usa poco, anzi mai da quando sono registrato)

i tasti quote e reply non li metterei usando gli url (e quindi appoggiandosi al sito) ma farei un interfaccia che poi di nascosto lancia la post. (da vedere, fa pesantissimo uso di javascript..)
cioè in generale per tutto ciò che non ho esplicitato "passare da browser" sarebbe parsato e incluso in grafica nativa.

manca il jpanel con la parte di login con capcha (ma direi che quì a parte l'eventuale immagine capcha + textbox è tutto statico) e il jpanel per postare ...

e ovviamente la classe che gestirà le richeste get/post + cockie verso il sito.

Il tutto senza toccare nulla lato server.. peccato per il redesign xD

Sarebbe utile pubblicare i sorgenti (anche incompleti o non funzionanti) da qualche parte per cercare di risolvere i problemi insieme.
Che dici?

sìsì, stavo riscrivendoli visto che quelli del pomeriggio li ho eleiminati. (il progetto completo è in allegato, ma lo carico su github appena posso)

Allora, ogni messaggio è un Fragment, e il suo Bundle contiene le varie info. (setRetainInstance(true) per evitare che il bundle venga distrutto, specialmente quando cambia l'orientamentodel monitor)

I fragment sono usati con la v4 per essere retrocompatibili, tutto il resto lo è di base.
In questo modo il target minimo è andorid 2.2, se nonerro (quello di default)

considera che è la prima app che scrivo, anche se ho molta esperienza con java..

forse al posto delle Fragment tanto valeva usare una ListView o similari, ma il problema è che la ListView non sembra accettare nuove View dinamicamente (ovvero al di fuiori della onCreate) e per evitare di perdermi questa è la soluzione facile.

Con questo ho una grafica minima dinamica con cui posso iniziare a giocare seriamente, primo obbiettivo è quello di visualizzare una discussione. (con possibilità di zoom)
Poi di navigare tra le discussioni.
Poi quella di loggarsi.
Infine quella di postare/editare.

Non ho intenzione di aggiungere altro nella grafica se non il karma con bottone +

ah identificato anche il tag per trovare i nuovi messaggi e relativa posizione dopo il tag dell'ID messaggio

ArduinoForum.zip (984 KB)

yay, inizio a vedere i primi messaggi! (allegata foto e codice)

ArduinoForum.rar (1.08 MB)

test1.bmp (227 KB)

Pienamente dacc ordo leo sulla negativirta' di tapatalk, sia perche' a pagamento ma principalmente perche' invasiva.

sto' facendo i miei rpimi passi su programmazione android, mi piacerebbe contrinuire, se non altro ai test, mettoa disposizione tab e 2 cell, uno vecchissimo ed uno nuovissimo con android 4.1.2

senti ma stai usando eclipse ed il adt plugin ufficiale android ?

il file .zip e' corrotto, puoi ricaricarlo che inizio a provarlo, c'e' anche il progetto eclipse dentro ?

sì, è un progetto di eclipseSDK...

il .zip è veccio, bisogna usare il .rar ora controllo che non sia corrotoo ma in casoè un problema perchè il PC l'ho lasciato a lavoro...uffi

edit: bhe per ora guarda lo zip, ti fai un'idea di come si usa la grafica. da notare che attraverso il pulsante posso aggiungere elementi.. quì il discorso è complesso.

Una App (ma tutto ciò che è grafico di solito) gira di base in un suo "thread UI".
Questo thread si occupa di gestire gli eventi, che non sono altro che interrupt lato software. In pratica se tut fai qualcosa tipo un tocco, il SO andorid legge l'evento, lo pre-elabora, lo da in pasto al thread UI dell'applicazione in fullscreen (non è detto che sia sempre così, devo ancora studiare), e il thread UI lo da in pasto all'eventuale listener(ascoltatore di eventi) associato.

Un listener è un interfaccia (quindi un qualcosa che ti obbliga a credare delle funzioni con determinati paramentri, equivalentio alle fuinzioni di interrupt), quindi la tua classe diventa ANCHE (puoi avere più interfaccie) una classe di TIPO interfaccia, e a questo punto puoi fare applicazione.addListener(classeInterfaccia);

PROBLEMA: se blocchi il thread UI blocchi anche l'interfaccia grafica e la gestione degli eventi (ES i bottoni non funzionano... capita anche con i programmi PC, mai fatto caso?)
i signori della android, hanno avuto un ottima idea; se il thread UI rimane impallato per più di 5 secondi, l'app viene vista cone non responsiva.

Even worse, if the UI thread is blocked for more than a few seconds (about 5 seconds currently) the user is presented with the infamous "application not responding" (ANR) dialog.

(il procedimento è uguale alle applicazioni swing di java e di tutti gli altri linguaggi e grafica non credere, sto semplicemente aggiungendo qualche info specifica da Processes and threads overview  |  App quality  |  Android Developers)

Quindi, ora cosa succede: quando premi il bottone, viene creato un thread a parte (vengono chiamati worker), che prende in input un url e un listener, e va per la sua strada.
Il listener è appunto una semplice interfaccia in cui ho definito 2 funzioni: setMessage(ArrayList di classe Messaggio che vredremo poi) e setError(String).
Ovviamente la classe Activity (la classe main, che poi è una FragmentActivity per mantenere la compatibilità con gli android 2.2, ma lo spiego poi), implementa il listener.

Quindi cosa succede? nulla, il thread grafico vive come se nulla fosse, intanto il worker apre la URL, scarica il contenuto della pagina, lo converte byte per byte in UTF8 (quindi NON ASCII, in teoria il server risponde con l'encoding, o meglio il charset, della pagina, ma non uso questo dato per ora), poi dall'HTML con i tag sopra estrae per ogni mesaggio i vari dati, e crea quindi l'array di classe messaggio.

La classe messaggio non solo contiene i dati, ma in realtà è un Fragment, una cosa che usa andorid apposta per fare grafiche molto dinamiche...

ora, quando i dati sono caricati, il worker non fa altro che listener.setMessage(array di messaggi), ed ecco che alla nostro listener arrivano i messaggi MA siamo ancora nel thread worker...

e il thred UI non è thred safe, ciò vuol dire che se lo modifichi da altri thread senza prenderele giuste e complesse precauzioni fai solo (grossi) casini.

Nel mio caso i fragment hanno qualche sbattimenro grafico ma più o meno funzionano,o ma la cosa mi dava problemi era in caso di errore (setError) veniva creata un AlertBox dal thread worker e faceva crashare tutto...

ora ci sono vari metodi ad esempio mettere i dati in una variabile, e poi intercettare un eveto del thredUI che controllo se i dati co sono/sono cambiati e fa la parte grafica...

ma ci sono già le soluzioni precoinfezionate_

Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)

e ancora meglio la classe AsyncTask, che ti da 2 metodi:
doInBackground, che è chiamata dal "thread worker" e
onPostExecute, che è eseguita dal "thread UI"
Notare che in pratica è il sistema di parcheggiare i dati in una variabile vista da entrambi i Thread, solo che anzichè come nel mio caso ricevere eneti solo dal Wroker, riceve eventi anche dal UI, e quindi "fa da ponte"

niente, anche il .rar e' corrotto

ma il plugin ADT google lo stai usando ?

(ri) caricato nel primo post il .rar!
da quì funziona, spero anahce a casa......

edit: sì, ho scaricato il SDK pack che ti da eclipse già modificato e funzionante... e me lo tengo ben separato da eclipse che uso per il java classico e quello che uso per il c/c++ :slight_smile:

comunque sbasta che derarri la cartella, e poi da eclipse SDK o con plugin ADK fai destro -> importa -> progetto into workspace

News: nonostante loff line grazie a google cache ho proseguito ieri notte.
Non posto il codice perché non funziona bene, ma in pratica ho aggiunto l'elenco delle biard principali.
Corretti un paio di bug uppo, poi aggiungo la visualizzazione dei forum ed infine sistemo quella dei messaggi per seguire il muovo sistema.
In pratica le fragment ora le uso per le viste a tutto schermo, mentre le liste non sono più liste di fragment ma liste normali, così scorrendole uso sempre le stesse 2 o 3 view riciclate.
mi piace android, è ben architetturato ed ottimizzabile... Per ora i tempi di caricamento da internet influiscono tantissimo, il mio codice è una scheggia :); anche se provato su una virtual machine, litighero col cell quando sarà stabile.

Proseguito ancora un pò...

prima visulizzavo tutte le board principali di seguito, ora invece sono espandibili, divise secondo i titoli (parlo della pagina Arduino Forum), il codice che invcece le mostrava tutte di fila è stato mantenuto e sarà utilizzato per mostarre invece il contenuto delle board (l'elenco dei topic per intenderci).
Quindi c'è da sistemare il parser per mostrare i topic (casi speciali da aggiungere: sotto-topic, che userà un sistema a loop, e topic "sticcati").
poi c'è da riscrivere quello dei meggaggi per usare una list invece che un fragment per messaggio (le view possono essere riutilizzate al volo, quindi non hai mai più di 5 o 6 view in memoria invece che decine di fragment), da sistemare il fatto che carica una paginaalla volta (voglio caricarle tutte in parallelo, o meglioprima la pagina richiesta e poi le eventuali altre in parallelo), aggiungere il tasto quote, modify e reply.
sistemare il listener clonandolo o aggiungendo oltre all'url da caricare quale fragment utilizzare.

Quindi in pratica:
Fragment LOGIN (da fare)
Fragment BOARD (OK)
Fragment TOPIC (da adattare, diciamo 50%)
Fragment MESSAGGIO (da riscrivere, diciamo 20%)
Fragment POST/EDIT (da fare)

in allegato lo stato attuale, prossima volta faccio anche degli screen-shot

NewArduinoForum.zip (1.1 MB)

Lesto stai tenendo in considerazione il pulsante piu' importante di tutto il forum ?
REPLIES in alto a destra :smiley:

io lo metterei visibile in tutte le schermate, senza Replies e' impossibile seguire questo forum e mi dispiace che non venga tenuto in considerazione, ricordo in un topic che nemmeno Banzi sapeva di cosa parlavo :slight_smile:

c'è, c'è (da fare)

Fragment POST/EDIT (da fare)

se intendi qualcosa di simile senza postare non so, perchè non uso DB e voglio tenere l'app leggera... Al massimo faccio una specie di segnalibri per i topic

Tu usi il tasto replies normalmente? Se lo premi ti appare una schermata con tuttii topic a cui hai risposto ma solo se hanno ricevuto controrisposta
Quindi nella app metterei un bottone, un segnalibro,un menu, non so decidi tu, che premuto mi faccia vedere lo stesso risultato

ah sì, è il tasto "unread replies" okok, sì, lo uso, e lo metterò.
In oltre se ci fai caso se sui topixc èremi sul + sul forum, compare la pagina con i topic che hanno avuto modifiche dall'ultima volta che hai aperto la board.

Il codice della app è già predisposto per riconoscere il click sul + o sul nome del tipic.

o meglio per errore ho usato onTouch invece che onClick, ma si risolveion fretta

edit: wow. oltre 700 visite... mi sa che la cosa interessa assai

bene bene, si procede.

Oggi aggiunta la navigazione di board e topic, da aggiungere i sotto-Topic.
I topic lanciano già l'evento con il corretto URL sia per leggere il topic che per leggere il topic a partire dai nuovi messaggi.
Invece per le board l'url per vedere i nuovi topic è null perchè non la estraevo (speravo di riuscire a farne a meno).
Poi ci sarebbe un minimo di restailing grafico...

allego, come promesso, gli screen-shot, ed uppo il workspase nel primo post

Quindi
Fragment LOGIN (da fare)
Fragment BOARD (da aggiungere URL unread topic, diciamo 90%)
Fragment TOPIC (OK)
Fragment MESSAGGIO (da riscrivere, diciamo 20%)
Fragment POST/EDIT (da fare)
Fragment UNREAD REPLIES (da fare)

principale1.png

principale2.png

topic1.png

topic2.png

uppo anche il workspace, in modo da creare un diario di tutti i workspace utilizzati..

NewArduinoForum2013-2-26.zip (1.1 MB)

tracata la formichina prosegue :slight_smile:

allora news: il simbolo - scompare, ingigantendo lo spazio per il nome delle board/topic, ma compare il + (quindi il bottone pervisualizzare direttamente i nuovi topic... pagina non testata per mancanza dinuovi topic a quest'ora :frowning: )

il bello che il suddetto coidice per le unread dovrebbe funzionare anche per le sotto-sezioni... che però devo ancora implementare, quindi anche quì non testato :frowning:

mi apsetto che funzioni anche con il tasto "unread replies" (che mi accorgo ora essere solo replies, sorry testato, ecco perchè non ci capivamo), anche quì non siscuro per mancanza di nuovi post da quando ci ho pensato e per la mancanza di un tasto "leggi unread", che pensavo di nascondere nel menù (ma selezionabile come "homepage"), per lasciare tutto lo spazio all'elenco board/topic/messaggi

infine ho sistemato un pò il gestore di eventi, unificandolo.

al solito allego un paio di screen-shot e il workspace, che aggiorno anche nel primo post.

principaleNew1.png

topicNew.png

NewArduinoForum27-2-2013.zip (1.11 MB)

Complimenti lesto bell'iniziativa ho ababdonato la programmazione andorid qualche tempo fà ho pubblicato giusto qualche app sul market poi mi sono ritirato per impegni lavorativi, se ti serve una mano per la gestione DB no problem :wink:
Programmo nei più svariati linguaggi da anni, purtroppo lavorativamente non sono mai stato nel campo web(solo grandi aziende quindi fatturazione etc etc), da quanto ho letto nella prima pagina tu sfrutti i tag presenti nel codice per leggere le varie parti che ti interessano, immagino che hai studiato un pò l'html del forum e l'hai sfruttato in questa maniera, ma di conseguenza basta che il forum venga aggiornato o la struttura cambiata o anche solo il nome di un tag variato che ti si sballa tutta l'app giusto?
(sto studiando un pò per conto mio la programmazione web per ora solo php, css e javascript)

ps potresti aggiungere un DB, e magari salvare le discussioni che uno si vuole rileggere o anche solo i topic, o anche solo segnalibri, ti assicuro che sqllite è leggero e si usa facilmente :wink: