Autore Topic: salvataggio e lettura dati  (Letto 380 volte)

Offline kikko088

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus s
  • Sistema operativo:
    OSx e Win
salvataggio e lettura dati
« il: 19 Febbraio 2014, 20:28:06 CET »
0
Ciao a tutti, avrei due domande da porvi, Ho un database costituito da oggetti, in particolar eho 3 oggetti A,B,C:
A contiene stringhe e un array di B
B contiene stringhe, un array di C e un oggetto A
C contiene stringhe, un oggetto A e un'oggetto B

la prima domanda è:
può provocare problemi avere una struttura del genere?la domanda sorge dal fatto che mi son fermato 2 secondi a ragionare e mi sembra un po una stuttura che si manga la coda, l'oggetto B contiene l'oggetto A che a sua volta contiene B, ecc....fin'ora ho utilizzato questo metodo su un'app iOS senza problemi ma ora mi è venuto questo dubbio
seconda domanda:
come posso salvare su un file questo un'array di A (con tutto il suo contenuto, quindi B,C) in modo da averlo pronto all'avvio dell'applicazione?per ora questi oggetti sono presenti su un JSON che viene letto all'apertura dell'applicazione, ma è un po lento come processo, vorrei aprire e avere già tutto pronto...come posso salvare questo array di oggetti in modo da poterlo riaprire in un secondo momento?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:salvataggio e lettura dati
« Risposta #1 il: 19 Febbraio 2014, 20:39:21 CET »
0
Una curiosità, ma quando dici "B contiene stringhe, un array di C e un oggetto A" (e le altre), intendi dire che "B può contenere stringhe, un array di C e un oggetto A" ?

Se l'interpretazione è "può contenere" ok, ma se dovesse contenerli tutti, la struttura avrebbe dimensione infinita per definizione e sarebbe impossibile averla su un JSON.  :-P


Vista la particolarissima natura della struttura dati, il JSON potrebbe essere la scelta migliore per memorizzarla (una database a tabelle lo vedo molto problematico). Per cui le domande riguardo la lentezza sono:
Che dimensione ha la base dati?
Stai usando un thread dedicato per il loading?
Stai usando un accesso a DOM oppure a InputStream?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline kikko088

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus s
  • Sistema operativo:
    OSx e Win
Re:salvataggio e lettura dati
« Risposta #2 il: 19 Febbraio 2014, 21:08:50 CET »
0
ecco...proprio quello intendevo, otterei dimensioni infinite, ora sicuramente non è cosi perchè il file ha dimensioni finite, in questo preciso istante ho un vuoto di memoria su come ho creato quel benedetto file (anzi...un dubbio su  si lo so, può sembrare strano :s) e il mio benedettissimo pc ha problemi e in questo momento non posso accedere alla mia bella app, l'attuale file JSON che ho creato è piu semplice:

A contiene stringhe e array di B
B contiene stringhe e array di C
C contiene stringhe

ma ho la necessita di inserire anche gli oggetti "padre" all'interno....mi sa però che opterò per un'altra soluzione, inserendo solo una proprietà della materia...

il parsing del file avviene in questo modo:

Codice: [Seleziona]
public ArrayList<Materia> parsingJSON () throws IOException, JSONException {
               
                InputStream is = getAssets().open("json.txt");
               
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();

            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            String result = sb.toString();
                JSONObject jObject = new JSONObject(result);
                JSONArray jArray = jObject.getJSONArray("materia");
               
                ArrayList<Materia> listMaterie = new ArrayList<Materia>();
                for (int i=0; i < jArray.length(); i++) {
                    try {
                            JSONObject matObj = jArray.getJSONObject(i);
                           
                            ArrayList<Sezione> listSezioni = new ArrayList<Sezione>();
                        JSONArray sArray = matObj.getJSONArray("sezione");
                                for (int j=0; j < sArray.length(); j++) {
                                    try {
                                            JSONObject sObject = sArray.getJSONObject(j);
                               
                                        ArrayList<Testo> listTesti = new ArrayList<Testo> ();
                                        JSONArray tArray = sObject.getJSONArray("testo");
                                                for (int k=0; k < tArray.length(); k++) {
                                                    try {
                                                            JSONObject tObject = tArray.getJSONObject(k);
                                                       
                                                        Testo txt = new Testo();
                                                        txt.setTitolo(tObject.getString("t_titolo"));
                                                        txt.setTesto(tObject.getString("t_testo"));
                                                        txt.setIsForPro(Boolean.parseBoolean(tObject.getString("isPro")));
                                                       
                                                        listTesti.add(txt);
                                                    }
                                                    catch (JSONException e) {
                                                            System.out.print(e.getLocalizedMessage());
                                                    }
                                                }
                                               
                                                Sezione sez = new Sezione();
                                                sez.setTitolo(sObject.getString("s_titolo"));
                                                sez.setIcona(sObject.getString("s_icona"));
                                                sez.setTesti(listTesti);
                                               
                                                listSezioni.add(sez);
                                        }
                                    catch (JSONException e) {
                                            System.out.print(e.getLocalizedMessage());
                                    }
                                }
                       
                                Materia mat = new Materia();
                                mat.setTitolo(matObj.getString("m_titolo"));
                                mat.setIcona(matObj.getString("m_titolo"));
                                mat.setSezioni(listSezioni);
                               
                                listMaterie.add(mat);       
                    }
                    catch (JSONException e) {
                            System.out.print(e.getLocalizedMessage());
                    }
                }
               
                return listMaterie;
        }

dici che in ogni caso il modo piu veloce per caricare i miei oggetti è quello di usare il JSON?
premetto che sono ancora agli inizi con android, quindi se mi servono strigliate andate strigliatemi senza problemi!XD

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:salvataggio e lettura dati
« Risposta #3 il: 19 Febbraio 2014, 23:28:07 CET »
0
Se la base dati è statica (cioè non devi cambiarla nell'app), secondo me puoi lasciarla senza problemi nel formato JSON e caricarla nell'app all'avvio. Sicuramente dovresti farlo con un Thread o AsyncTask dedicato, non direttamente nella OnCreate. L'unico caso in cui penserei a trasformare il JSON in un database SQLite, è se il caricamento del json prende più di qualche secondo.

Infine, già usi InputStream e tutto il resto, che è la soluzione a migliori performance nel caso di JSON molto pesanti.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store