Autore Topic: Gestione dati  (Letto 497 volte)

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Gestione dati
« il: 07 Maggio 2012, 11:14:38 CEST »
0
Ciao a tutti,
sto sviluppando una nuova applicazione..

All'interno ho una mascherina che prende 2 dati da 2 edittext e li mette in una lista..

Ora.. Dopo aver inserito i valori, all'avvio successivo li voglio vedere all'entrata da selezionare..

Mi spiego meglio.. Io ho una mascherina dove metto:

Nome: Pippo
Età: 33
e un bottone aggiungi. Poi

Nome: Pluto
Età: 24
e aggiungi.

All'avvio successivo vedrò:

Pippo, 33
Pluto,24

Entrambi cliccabili.

Secondo voi.. E' possibile creare una lista che mi permette di aggiungere dei dati? Oppure creo un file xml?

Vi ringrazio.

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Gestione dati
« Risposta #1 il: 07 Maggio 2012, 11:25:11 CEST »
0
Ti conviene utilizzare un database: fai una tabella con una chiave autoincrementante, nome1, eta1, nome2, eta2.

All'avvio, prendi i valori da quelli con chiave più alta e le inserisci nell'edittext  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Gestione dati
« Risposta #2 il: 07 Maggio 2012, 11:27:11 CEST »
0
Ho trovato questo:

Codice (Java): [Seleziona]
package com.example.utils;

import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONException;

import android.content.Context;
import android.content.SharedPreferences;

public class JSONSharedPreferences {
    private static final String PREFIX = "json";

    public static void saveJSONObject(Context c, String prefName, String key, JSONObject object) {
        SharedPreferences settings = c.getSharedPreferences(prefName, 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString(JSONSharedPreferences.PREFIX+key, object.toString());
        editor.commit();
    }

    public static void saveJSONArray(Context c, String prefName, String key, JSONArray array) {
        SharedPreferences settings = c.getSharedPreferences(prefName, 0);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString(JSONSharedPreferences.PREFIX+key, array.toString());
        editor.commit();
    }

    public static JSONObject loadJSONObject(Context c, String prefName, String key) throws JSONException {
        SharedPreferences settings = c.getSharedPreferences(prefName, 0);
        return new JSONObject(settings.getString(JSONSharedPreferences.PREFIX+key, "{}"));
    }

    public static JSONArray loadJSONArray(Context c, String prefName, String key) throws JSONException {
        SharedPreferences settings = c.getSharedPreferences(prefName, 0);
        return new JSONArray(settings.getString(JSONSharedPreferences.PREFIX+key, "[]"));
    }

    public static void remove(Context c, String prefName, String key) {
        SharedPreferences settings = c.getSharedPreferences(prefName, 0);
        if (settings.contains(JSONSharedPreferences.PREFIX+key)) {
            SharedPreferences.Editor editor = settings.edit();
            editor.remove(JSONSharedPreferences.PREFIX+key);
            editor.commit();
        }
    }
}

Dici che mi complicherei di più le cose piuttosto che un db?

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Gestione dati
« Risposta #3 il: 07 Maggio 2012, 15:30:59 CEST »
0
Ho provato a creare un db..

Codice (Java): [Seleziona]
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDatabase {  

    SQLiteDatabase mDb;
    DbHelper mDbHelper;
    Context mContext;
    private static final String DB_NAME="WFListdb";//nome del db
    private static final int DB_VERSION=1; //numero di versione del nostro db
   
    public MyDatabase(Context ctx){
            mContext=ctx;
            mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);   //quando istanziamo questa classe, istanziamo anche l'helper (vedi sotto)    
    }
   
    public void open(){  //il database su cui agiamo è leggibile/scrivibile
            mDb=mDbHelper.getWritableDatabase();
           
    }
   
    public void close(){ //chiudiamo il database su cui agiamo
            mDb.close();
    }
   

   
    public void insertWf(String name,String cls){ //metodo per inserire i dati
            ContentValues cv=new ContentValues();
            cv.put(WfMetaData.WF_NAME_KEY, name);
            cv.put(WfMetaData.WF_CLASS_KEY, cls);
            mDb.insert(WfMetaData.WF_TABLE, null, cv);
    }
   
    public Cursor fetchWfs(){ //metodo per fare la query di tutti i dati
            return mDb.query(WfMetaData.WF_TABLE, null,null,null,null,null,null);              
    }

    static class WfMetaData {  // i metadati della tabella, accessibili ovunque
            static final String WF_TABLE = "wfs";
            static final String ID = "_id";
            static final String WF_NAME_KEY = "name";
            static final String WF_CLASS_KEY = "class";
    }

    private static final String WF_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  //codice sql di creazione della tabella
                    + WfMetaData.WF_TABLE + " ("
                    + WfMetaData.ID+ " integer primary key autoincrement, "
                    + WfMetaData.WF_NAME_KEY + " text not null, "
                    + WfMetaData.WF_CLASS_KEY + " text not null);";

    private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db

            public DbHelper(Context context, String name, CursorFactory factory,int version) {
                    super(context, name, factory, version);
            }

            @Override
            public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella
                    _db.execSQL(WF_TABLE_CREATE);
            }

            @Override
            public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
                    //qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app, il db cambia numero di versione

            }

    }
           

}

Poi quello che inserisco nel metodo onCreate:

Codice (Java): [Seleziona]
TextView wfsTv=(TextView)findViewById(R.id.wfsTv);
                ListView wfsLv = (ListView)findViewById(R.id.wfsLv);
               
                MyDatabase db=new MyDatabase(getApplicationContext());
        db.open();  //apriamo il db
       
       
        if(db.fetchWfs().getCount()==0){//inserimento dati, solo se il db è vuoto
       
                db.insertWf("WF1", "class1" );
                db.insertWf("WF2", "class2");
                db.insertWf("WF3", "class3");
                db.insertWf("WF4", "class4");
                db.insertWf("WF5", "class5");
       
        }
 
        Cursor c=db.fetchWfs(); // query
        startManagingCursor(c);
       
        SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
                        this,
                        R.layout.wfs, //il layout di ogni riga/prodotto
                        c,
                        new String[]{MyDatabase.WfMetaData.WF_NAME_KEY,MyDatabase.WfMetaData.WF_CLASS_KEY},//questi colonne
                        new int[]{R.id.nameTv,R.id.classTv});//in queste views
       
        wfsLv.setAdapter(adapter); //la listview ha questo adapter
       
       
        //qui vediamo invece come reperire i dati e usarli, in questo caso li stampiamo in una textview
       
        int nameCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_NAME_KEY);  //indici delle colonne
        int classCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_CLASS_KEY);      
       
        if(c.moveToFirst()){  //se va alla prima entry, il cursore non è vuoto
                do {
                               
                        wfsTv.append("Wf Name:"+c.getString(nameCol)+", Class:"+c.getInt(classCol)+"\n"); //estrazione dei dati dalla entry del cursor
                                       
                        } while (c.moveToNext());//iteriamo al prossimo elemento
        }
       
        db.close();

e i due xml.. Quello generale:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >


    <TextView
       android:id="@+id/textView1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Scegli il Workflow da testare:"
       android:gravity="center" />

    <TextView
       android:id="@+id/textView2"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Workflow di defaul" />

    <Button
       android:id="@+id/button1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Master" />

    <TextView
       android:id="@+id/textView3"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Nuovi Workflow" />

    <TextView
       android:id="@+id/wfsTv"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:textColor="#000000"
       android:textSize="25dp"
       android:textStyle="bold" />

    <ListView
       android:id="@+id/wfsLv"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:cacheColorHint="#00000000"
       android:dividerHeight="2dp"
               
   ></ListView>
</LinearLayout>

e quello specifico per ogni riga:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:orientation="horizontal"
       android:weightSum="10"
       >
        <TextView              
               android:id="@+id/nameTv"
               android:layout_width="0dp"
               android:layout_height="wrap_content"
               android:layout_weight="8"
               android:textSize="15dp"
               android:textStyle="bold"
               android:textColor="#000000">
        </TextView>
        <TextView              
               android:id="@+id/classTv"
               android:layout_width="0dp"
               android:layout_height="wrap_content"
               android:layout_weight="2"
               android:textSize="15dp"
               android:textStyle="bold"
               android:textColor="#000000">
        </TextView>
</LinearLayout>

Però quando lo lancio non mi parte nulla.. O meglio.. nella pagina dove dovrebbe visualizzare la lista non mi mette nulla e lascia delle righe vuote.. come mai? cosa sbaglio?
« Ultima modifica: 07 Maggio 2012, 15:40:36 CEST da darkmax »

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Gestione dati
« Risposta #4 il: 07 Maggio 2012, 16:24:42 CEST »
0
Risolto!! Era il colore del testo..  ???

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Gestione dati
« Risposta #5 il: 07 Maggio 2012, 20:02:57 CEST »
0
Sono contento per te! scusa se non ti ho più risposto, ma ero al lavoro  ;-) se hai risolto segnala il topic come risolto, mi raccomando!
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Gestione dati
« Risposta #6 il: 08 Maggio 2012, 10:50:28 CEST »
0
Ciao.. ho creato il db.. Volevo però chiedere una cosa..

Io ho il db in un'Activity che si apre e mi fa vedere la lista dei dati scritti sul db..

Ho poi nelle options un bottone che mi apre un'altra Activity che server ad inserire i dati sul db(ha due caselle di testo ed un pulsante aggiungi)

come posso fare per far vedere il db anche all'altra activity e aggiungere i dati? ti ringrazio.

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Gestione dati
« Risposta #7 il: 08 Maggio 2012, 11:53:58 CEST »
0
come posso fare per far vedere il db anche all'altra activity e aggiungere i dati? ti ringrazio.
Codice (Java): [Seleziona]
MyDatabase db=new MyDatabase(getApplicationContext());
db.open();

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Gestione dati
« Risposta #8 il: 08 Maggio 2012, 11:57:33 CEST »
0
Ma non si sprecano risorse creando una nuova istanza? Non è meglio usare un Content Provider?

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Gestione dati
« Risposta #9 il: 08 Maggio 2012, 12:04:16 CEST »
0
Oppure è più comodo così? Cioè.. apro il db.. gli metto i dai e lo richiudo?

Offline darkmax

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Gestione dati
« Risposta #10 il: 08 Maggio 2012, 12:32:10 CEST »
0
Ti ringrazio.. Con questo metodo son riuscito.. In effetti sono proprio fuori di testa in sti giorni e non ho pensato a questa soluzione..

Ti chiedo ora un'altra cosa.. Come faccio ora a fare un update della lista ogni volta che torno all'Activity della lista?