Pages: [1] 2 3   Go Down
Author Topic: [ITA] arduino forum app test/development  (Read 4119 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

[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 (45.08 KB, 472x320 - viewed 20 times.)

* principale2.png (53.94 KB, 556x427 - viewed 19 times.)
* NewArduinoForum10-4-2013.zip (1368.47 KB - downloaded 7 times.)
« Last Edit: April 10, 2013, 04:06:36 pm by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Quote
Ogni messaggio inizia con il tag

Quote
<a name="msg1117248"></a>
dove ovviamente il numero cambia. ottimo per saltare l'html inutile e arrivare dove ci interessa

poi ci serve il tag
Quote
<div class="memberName">
che contiene il nome, link al profilo e immagine utente (metterei solo il nome e il link che apre il browser)

Quote
<div class="memberKarma">
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
<div class="postSubject" id="subject_1117222">
titolo del post

Quote
<div class="postDate">
per la data del post

Quote
<div class="post">
contenuto del post

Quote
<div class="signature">
firma dell'utente (non la metteri)

Quote
<a href="http://arduino.cc/forum/index.php?action=reporttm;topic=148630.15;msg=1117222">Report to moderator</a> &nbsp;
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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Sr. Member
****
Karma: 2
Posts: 340
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Quote
<a name="msg1119609"></a><a name="new"></a>

* ArduinoForum.zip (983.87 KB - downloaded 13 times.)
« Last Edit: February 14, 2013, 07:46:06 pm by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


* ArduinoForum.rar (1102.96 KB - downloaded 12 times.)

* test1.bmp (227.16 KB, 240x323 - viewed 28 times.)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
« Last Edit: February 15, 2013, 05:56:18 pm by Testato » Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Quote
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 http://developer.android.com/guide/components/processes-and-threads.html)

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_

Code:
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"
« Last Edit: February 16, 2013, 06:38:58 am by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

niente, anche il .rar e' corrotto

ma il plugin ADT google lo stai usando ?
http://developer.android.com/tools/sdk/eclipse-adt.html

Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

(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++ smiley

comunque sbasta che derarri la cartella, e poi da eclipse SDK o con plugin ADK fai destro -> importa -> progetto into workspace
« Last Edit: February 18, 2013, 12:41:51 pm by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley; anche se provato su una virtual machine, litighero col cell quando sarà stabile.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Proseguito ancora un pò...

prima visulizzavo tutte le board principali di seguito, ora invece sono espandibili, divise secondo i titoli (parlo della pagina http://arduino.cc/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 (1124.07 KB - downloaded 8 times.)
« Last Edit: February 23, 2013, 10:08:22 pm by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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  smiley
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

c'è, c'è (da fare)
Quote
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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Pages: [1] 2 3   Go Up
Jump to: