Autore Topic: Gestione DB con più Layout  (Letto 1256 volte)

Offline cecco74

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
Gestione DB con più Layout
« il: 07 Dicembre 2012, 18:47:42 CET »
0
Salve a tutti, sono nuovo alla programmazione Java ed alle applicazioni android.
Vorrei creare una applicazione per lo storage di dati utilizzando più layout: "home" come pagina iniziale, "profilo" per la visualizzazione dei dati e "inserisci" per l'inserimento.
È da un pò che ho un errore e non riesco a trovare la soluzione.
Il sistema va subito in crash ed il Logcat da una serie di errori ... Allego il le cartelle con i codici utilizzati ed il file del LogCat.
Il progetto è stato realizzato in API17

Qualcuno sà darmi una mano???

Thanks

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:Gestione DB con più Layout
« Risposta #1 il: 07 Dicembre 2012, 19:17:32 CET »
0
Citazione
12-07 17:32:34.766: E/AndroidRuntime(794): Caused by: java.lang.NullPointerException
12-07 17:32:34.766: E/AndroidRuntime(794):    at test.anagrafica.MainActivity.onCreate(MainActivity.java:75)

Alla riga 75 di MainActivity.java qualcosa è NULL e non dovrebbe esserlo.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline cecco74

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
Re:Gestione DB con più Layout
« Risposta #2 il: 10 Dicembre 2012, 15:45:35 CET »
0
Non riesco a capire perché da NULL?!? o_O
Questo è il mio codice:

package test.anagrafica;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
   public void pageProfilo (View view) {
      setContentView(R.layout.profilo);
   }
   public void pageInserisci (View view) {
      setContentView(R.layout.inserisci);
   }
   public void home (View view) {
      setContentView(R.layout.home);
   }
   
   public static final String DATABASE_NAME = "anagrafica.db";
   public static final String ANAGRAFICA_TABLE = "anagrafica";
   public static final String COLUMN_ID = "ID";
   public static final String COLUMN_NOME = "NOME";
   public static final String COLUMN_COGNOME = "COGNOME";
   public static final String COLUMN_DATA = "DATA";
   public static final String COLUMN_INDIRIZZO = "INDIRIZZO";
   private SQLiteDatabase anagraficaDB;

   @Override
   protected void onResume() {   
      super.onResume();
      anagraficaDB = openOrCreateDatabase(DATABASE_NAME,
         SQLiteDatabase.CREATE_IF_NECESSARY
         | SQLiteDatabase.OPEN_READWRITE, null);
      anagraficaDB.execSQL("CREATE TABLE IF NOT EXISTS "
         + ANAGRAFICA_TABLE + " ("
         + COLUMN_ID + " INTEGER PRIMARY KEY, "
         + COLUMN_NOME + " VARCHAR, "    
         + COLUMN_COGNOME + " VARCHAR, "
         + COLUMN_DATA + " VARCHAR, "    
         + COLUMN_INDIRIZZO + " VARCHAR )");
   }
   
   @Override
   protected void onPause() {
      super.onPause();
      if (anagraficaDB.isOpen()) {
         anagraficaDB.close();
      }
    }

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.home);

      final EditText insNome = (EditText) findViewById(R.id.insNome);
      final EditText insCognome = (EditText) findViewById(R.id.insCognome);
      final EditText insData = (EditText) findViewById(R.id.insData);
      final EditText insIndirizzo = (EditText) findViewById(R.id.insIndirizzo);
      
      final TextView profNome = (TextView) findViewById(R.id.profNome);
      final TextView profCognome = (TextView) findViewById(R.id.profCognome);
      final TextView profData = (TextView) findViewById(R.id.profData);
      final TextView profIndirizzo = (TextView) findViewById(R.id.profIndirizzo);
   
                    Button bSalva = (Button) findViewById(R.id.bSalva);
/*Riga 75*/   bSalva.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                  
                  String nome = insNome.getText().toString();   
                  String cognome = insCognome.getText().toString();
                  String data = insData.getText().toString();
                  String indirizzo = insIndirizzo.getText().toString();
                  
                  ContentValues values = new ContentValues();
                  values.put(COLUMN_NOME, nome);
                  values.put(COLUMN_COGNOME, cognome);
                  values.put(COLUMN_DATA, data);
                  values.put(COLUMN_INDIRIZZO, indirizzo);
      
                  anagraficaDB.insert(ANAGRAFICA_TABLE, null, values);
                  
                  insNome.setText(String.valueOf(""));
                  insCognome.setText(String.valueOf(""));
                  insData.setText(String.valueOf(""));   
                  insIndirizzo.setText(String.valueOf(""));
               }
            });
      
                    Button bPageProfilo = (Button) findViewById(R.id.bPageProfilo);
            bPageProfilo.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                  Cursor c = anagraficaDB.query(ANAGRAFICA_TABLE, new String[] {
                     COLUMN_NOME, COLUMN_COGNOME, COLUMN_DATA, COLUMN_INDIRIZZO }, null, null, null, null,
                     COLUMN_NOME);
                  StringBuilder builder = new StringBuilder();
                  c.moveToLast();
                  for(int i=c.getCount()-1; i>=0; i--) {
                     profNome.setText(builder.append(c.getString(0)));
                     profCognome.setText(builder.append(c.getString(1)));
                     profData.setText(builder.append(c.getString(2)));
                     profIndirizzo.setText(builder.append(c.getString(3)));
                     c.moveToPrevious();
                  }
                   c.close();
               }
            });
      
                    Button clearDB = (Button) findViewById(R.id.buttonClear);
            final TextView textView1 = (TextView) findViewById(R.id.textView1);
            clearDB.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                  anagraficaDB.delete(ANAGRAFICA_TABLE, null, null);
                  Cursor c = anagraficaDB.query(ANAGRAFICA_TABLE, new String[] {
                        COLUMN_NOME, COLUMN_COGNOME, COLUMN_DATA, COLUMN_INDIRIZZO }, null, null, null, null,
                        COLUMN_NOME);
                  textView1.setText(String.valueOf("Database Vuoto"));
                  c.close();
               }
            });
   }   
}

Ho evidenziato la riga.
Suggerimenti?

Grazie mille in anticipo

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:Gestione DB con più Layout
« Risposta #3 il: 10 Dicembre 2012, 16:17:04 CET »
0
La cosa più probabile è che bSalva NULL, per esempio se nel layout non c'è nessun Button con identificativo R.id.bSalva.
Puoi verificarlo molto facilmente con un Log.d("TAG","bSalva è : "+bSalva) dopo il findviewbyid.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline cecco74

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
Re:Gestione DB con più Layout
« Risposta #4 il: 11 Dicembre 2012, 13:55:50 CET »
0
... effettivamente il bSalva non era nel Layout "Home" ma nel Layout "inserisci" .
In realtà il bSalva deve essere solo nel Layout "inserisci" ... quale è secondo te la soluzione migliore? Creare un bSalva nel  Layout "Home" e renderlo invisibile? o hai da darmi una soluzione più elegante?

Grazie

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Gestione DB con più Layout
« Risposta #5 il: 11 Dicembre 2012, 16:06:27 CET »
0
La soluzione più elegante sarebbe quella di lasciar perdere l'uso dei layout come stai facendo in questo momento, oltre che a distribuire le responsabilità su più classi (questa Activity fa praticamente di tutto :P).
Credo che i Fragments siano la risposta al tuo problema :)

Offline cecco74

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
Re:Gestione DB con più Layout
« Risposta #6 il: 15 Dicembre 2012, 11:04:41 CET »
0
Grazie per le dritte ricevute ....  :-* ho cominciato ha vedere i Fragments e sembrano proprio fare al caso ....