Italian Infarinatura su DB in B4A.

maxware

Well-Known Member
Licensed User
Longtime User
Scusa erosmax ma non ho capito una cosa
nella tua app c'e il file txt e quando uno lo installa l'app prende i dati dal txt e poi li metti nel db ?
perchè' se e' cosi io metterei nell' app il db di default e quanto lo installi la prima volta lo preleva e lo mette nella cartella del gioco
per gestire il db sqllite tramite pc ti consiglio questo software SQLite Database Browser 2.0
puoi creare il db ,tabelle record fare sql ecc ecc
Mamo
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
No mi sono spiegato male io.
A me serviva mettere il DB direttamente sul gioco (come detto da maxware) e quindi, convertire il mio file .txt in DB per poi poterlo leggere dall'APP (visto che i dati li avevo in questo file di testo).
Quindi sono buone entrambe le vostre risposte. ;)
Quella di Max, per fare le cose più velocemente, mentre quella di Luca, per farla da codice (infatti stavo cedendo QUESTO video dove spiegava bene la faccenda... anche se in spagnolo :p).

Grazie ad entrami.
 

anallie0

Active Member
Licensed User
Longtime User
File.DirAssets
Questa cartella contiene i file che sono stati aggiunti con il file manager (in basso a destra dell'IDE dove c'è scritto File). Questi file sono di sola lettura. Non è possibile creare nuovi file in questa cartella (che in realtà si trova all'interno del file apk).

File.DirInternal
Questa cartella è memorizzata nella memoria principale e sono riservate per vostra applicazione. Altre applicazioni non possono accedere a questi file.

File.DirRootExternal
La cartella principale della scheda di memoria (del telefono).

File.DirDefaultExternal
La cartella predefinita per l'applicazione sulla scheda SD.
La cartella è: <Storage CARD> / Android / data / <package> / files /
Verrà creata se necessario.

Prima di modificare il tuo file di testo devi prima crearlo o copiarlo da DirAssets in una delle altre cartelle

B4X:
Dim MyFile As String
Dim FilePathSource As String        :FilePathSource=File.DirAssets
Dim FilePathDest As String        :FilePathDest=File.DirDefaultExternal


        File.Copy(FilePathSource,MyFile,FilePathDest,MyFile)

PS ti consiglio di fare prove direttamente col telefono senza emulatore che è di una lentezza esasperante, inoltre vedi esattamente quello che hai scritto con tutte le condizioni reali.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
GASP! 13MB di DB!!!! ...172000 referenze!!! e dove lo metto?!?!? :(
Per capirci, per fortuna l'ho accorciat di moooolto!!! Insomma, contiene il dizionario della lingua italiana, escluso parole sotto le 2 lettere e superiore alle 10 (che ho tolto perché non mi servono)!!!
Dove lo metto? e come lo interfaccio? :oops:

PS: grazie per la delucidazione anellie0 ;)
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Si max, alla fine l'ho creato con il programma che mi hai consigliato... solo che, come detto è 13MB di cose! :(
Poco fa, l'App sola (ancora ferma con le 4 frecce per via del DB), pesava 2MB....ora, con questo e senza record e utenze varie, sono arrivato a 7MB (l'ho incluso nell'APP).
A questo punto, separeò i DB e lascerò quello non modificabile, direttamente all'interno dell'APP, senza spostarlo... mentre quelli aggiornabili (Classifiche, livelli e giocatori), li creo, se non esistono, direttamente da codice sulla SD o nel telefono, cercando di criptarli (con encriyption).
Dimmi se sbaglio o se è la soluzione migliore.
Ma il File.DirInternal è writable? ed è accessibile dall'esterno? Altrimenti eviterei il crypt...ma non penso lo sia. :rolleyes:
Urge chiariento.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Ok quindi vado bene.
Riguardo alla DirInternal, non capisco se è accessibile dall'esterno e come fare.
Se posto i dati livelli su un DB esterno (o interno facendo controlli), non vorrei che possano modificarlo e, quindi, dovrei utilizzare encryption con una mia chiave? Oppure quella dir, èè già protetta di suo?
Non è che soo campi vitali o della Nasa :p, però mi darebbe fastidio che fosse semplice barare. :rolleyes:
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Cosa intendi per accessibile solo da root... che possono accedervi solo se hanno il telefono rootato, e quindi modificare il DB? Oppure che non posso entrarci io da codice (ma sembra strano)?
Perché, nel primo caso, allora è meglio cryptare :D

Proviamo....così, dovrebbe funzionare (ed evito di creare da codice anche il DB aggiornabile, copiandolo vuoto solo la prima volta) :p

B4X:
    Dim root As String
Dim SQL as SQL
    If File.ExternalWritable Then            'se esiste la SD setto quella
        root=File.DirDefaultExternal
    Else
        root=File.DirInternal                '...altrimenti nella memoria del telefono
    End If
    If File.Exists(root,"Mydata.db")=False Then                         'controllo se il file esistehD
        File.Copy(File.DirAssets,"Datpa.db", root,"Mydata.db")    'se non esiste il db lo copio dall DirAssets, nella SD o HD
    End If
SQL.Initialize(root,"Mydata.db")

...comincio a raccapizzarmi, piano, piano.
Però cos', ancora non è cryptata!
 

LucaMs

Expert
Licensed User
Longtime User
No, la DirInternal è accessibile solo da codice (a meno che non smanetti con l'utente Root, cosa che non è da tutti).

(Probabilmente non è il tuo caso, ma ricordati che i file posso anche venire zippati)


P.S. che schifo "zippati"... compressi


In effetti, se non sbaglio il limite per la pubblicazione delle app è di 25mb.
Se superi questa quantità, potresti zippare il db dizionario e unzipparlo sul dispositivo dell'utente.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Luca...root è la variabile che vado a riempire per sceglire se metterlo sulla SD o sul telefono. o_O
Ma, comunque, sceglierà di metterlo nella Internal stra-cryptato ;)

Max, non sono solo i punteggi quelli da difendere (volendo poi fare una classifica nazionale), ma anche i livelli.
Comunque la strada è spianata lacrypto e il DB sembrano a posto.
25MB spero di non arrivarci mai...cavolo non lo fanno i giochi più spettacolari e lo deve fare la mia misera appina :D
Per ora, sto a 7,8MB... speriamo di mon supeare i 10! ;) (manco stessi facendo chissà cosa :eek::D).

....Oggi, è successa una cosa strana e che non capisco :oops:
Quando lancio l'App in Debug (rapid), mi da un errore di blocco "Unfortutately, Parolando as stopped." :eek:
Se lancio in Debug (legacy) o in Release, questa parte senza problemi :confused:...mah!
 

LucaMs

Expert
Licensed User
Longtime User
GASP! 13MB di DB!!!! ...172000 referenze!!! e dove lo metto?!?!? :(
Per capirci, per fortuna l'ho accorciat di moooolto!!! Insomma, contiene il dizionario della lingua italiana, escluso parole sotto le 2 lettere e superiore alle 10 (che ho tolto perché non mi servono)!!!
Dove lo metto? e come lo interfaccio? :oops:

PS: grazie per la delucidazione anellie0 ;)



So che Root è il nome della variabile; proprio per questo ti consigliavo di cambiarlo.

Zip e 25mb era riferito a questo tuo post.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
aaaah ecco! ;)
Beh! 13MB era il DB completo (ma anche senza molti inserimenti). Una volta inserito allinterno dell'APP, miaspettavo che li tenesse... invece, per ora, l'APP (con al suo interno il DB), occupa 7.875KB
Ora sto lavorando sulla creazione giocatori e sul loro caricamentoe cancellazione.
 
Last edited:
Top