Autore Topic: errore nullpointerexception  (Letto 532 volte)

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
errore nullpointerexception
« il: 17 Aprile 2016, 14:52:00 CEST »
0
Salve a tutti
Vi scrivo per un problema che sto avendo con il mio primo Database

Per iniziare volevo creare semplicemente un'app di prova che doveva creare un database, inserire all'avvio dell'applicazione un dato è visualizzarlo su un textview
ma nonostante la semplicità del progetto stò ricorrendo in un errore che non stò ben capendo come risolvere

Piccola premessa: probabilmente ci saranno dei pezzi di codice inutili che non verranno utilizzati, queste righe di codice ci sono perchè inizialmente pensavo di fare un progetto un pò più complesso ma poi ho ridimensionato di molto i miei piani. Ho già tolto molte parti inutili ma non sapendo benissimo se togliere alcuni pezzi o no, nel dubbio li ho lasciati.


Ho suddiviso il progetto in più classi

Una classe DatabaseStrings
Codice (Java): [Seleziona]
public class DatabaseStrings {
    //tabella casa
    public static final String TBL_NAME_CASA="casa";
    public static final String FIELD_ID="_id";
    public static final String FIELD_SPESA="spesa";

}

Un'altra  che è il DBHelper che mi aiutera per creare la tabella dove andare a memorizzare i dati

Codice (Java): [Seleziona]
public class DBhelper extends SQLiteOpenHelper {

    public static final String DBNAME="PAGAMENTI";

    public DBhelper(Context context) {
        super(context, DBNAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //Creazione tabella casa
        String q="CREATE TABLE "+DatabaseStrings.TBL_NAME_CASA+
                " (_id INTEGER PRIMARY KEY AUTOINCREMENT,"+
                DatabaseStrings.FIELD_SPESA+" TEXT)";

        db.execSQL(q);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}


il DBManager che serve per gestire il database(dove ho alcuni dubbi sulla sua utilità per quello che devo fare io)

Codice (Java): [Seleziona]
public class DbManager {

    private DBhelper dBhelper;

    public DbManager(Context ctx){

        dBhelper=new DBhelper (ctx);
    }
public Cursor query(){

        Cursor crs=null;

        try {
            SQLiteDatabase db = dBhelper.getReadableDatabase();
            crs = db.query(DatabaseStrings.TBL_NAME_CASA, null, null, null, null, null, null, null);
        }
        catch (SQLiteException sqle){return null;}

        return crs;
    }




}




Ed infine il Mainactivity:


Codice (Java): [Seleziona]
public class MainActivity extends AppCompatActivity {
    private DBhelper dBhelper;
    private DbManager db=null;


    TextView txtcasa;

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

        txtcasa=(TextView) findViewById(R.id.textcasa);

        db=new DbManager(this);


       Cursor crs= db.query();
        SQLiteDatabase db=dBhelper.getReadableDatabase();
        crs=db.query(DatabaseStrings.TBL_NAME_CASA, null, null, null, null, null, null, null);
        while (crs.moveToNext()){
            int posizioneColonnaNome = crs.getColumnIndex(DatabaseStrings.FIELD_SPESA);

            String prossimaspesa = crs.getString(posizioneColonnaNome);

            int interoprossimaspesa=Integer.parseInt(prossimaspesa);
            int sommaspesacasa=0;
            sommaspesacasa=sommaspesacasa+interoprossimaspesa;

            txtcasa.setText(sommaspesacasa);

        }

        crs.close();
    }

public Cursor query(){

    Cursor crs=null;
    try
    {
        SQLiteDatabase db=dBhelper.getReadableDatabase();
        crs=db.query(DatabaseStrings.TBL_NAME_CASA, null, null, null, null, null, null, null);
    }
    catch(SQLiteException sqle)
    {
        return null;
    }
    return crs;

}

}


l'errore che mi da è questo:
Codice (Java): [Seleziona]
Caused by: java.lang.NullPointerException
                                                                                     at com.example.marco.dbs_pagamenti.MainActivity.onCreate(MainActivity.java:44)
                                                                                     at android.app.Activity.performCreate(Activity.java:5368)
                                                                                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
                                                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
                                                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2484)
                                                                                     at android.app.ActivityThread.access$800(ActivityThread.java:158)
                                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1391)
                                                                                     at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                                     at android.os.Looper.loop(Looper.java:193)
                                                                                     at android.app.ActivityThread.main(ActivityThread.java:5486)
                                                                                     at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                     at java.lang.reflect.Method.invoke(Method.java:515)


Grazie in anticipo per le risposte

Spero di essere stato abbastanza chiaro in caso se non capite alcune cose chiedete pure e cercherò di dirle in modo più chiaro

Probabilmente è una sciocchezza o semplicemente ho fatto un disastro ma spero riusciate a chiarirmi un pò le mie idee

Offline NetGEL

  • Utente normale
  • ***
  • Post: 200
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:errore nullpointerexception
« Risposta #1 il: 17 Aprile 2016, 17:07:33 CEST »
0
Ciao, non capisco perchè istanzi due classi una DBHelper e una DBManager

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
Re:errore nullpointerexception
« Risposta #2 il: 17 Aprile 2016, 21:53:04 CEST »
0
Ciao Netgel

Ne ho create due una principalmente per la creazione della tabella ed una per possibili operazioni che potrei fare con il Database

Ma essendo molto inesperto in questo campo potrei aver fatto una cosa inutile

Tu come pensi avrei potuto procedere?


Offline NetGEL

  • Utente normale
  • ***
  • Post: 200
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:errore nullpointerexception
« Risposta #3 il: 17 Aprile 2016, 22:11:43 CEST »
0
Ho modificato un po' il tuo codice te lo posto

Post unito: 17 Aprile 2016, 22:13:51 CEST
DBHelper

Codice (Java): [Seleziona]
public class DBHelper extends SQLiteOpenHelper {

    private static final int database_VERSION = 1;
    public static final String DBNAME="PAGAMENTI";

    public static final String TBL_NAME_CASA="casa";
    public static final String FIELD_ID="_id";
    public static final String FIELD_SPESA="spesa";



    public DBHelper(Context context) {
        super(context, DBNAME, null, database_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //Creazione tabella casa
        db.execSQL("CREATE TABLE "+ TBL_NAME_CASA + " (_id INTEGER PRIMARY KEY AUTOINCREMENT," + FIELD_SPESA + " TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public Integer query(){

        Cursor crs;
        int sommaspesacasa = 0;

        try {
            SQLiteDatabase db = getReadableDatabase();
            crs = db.query(TBL_NAME_CASA, null, null, null, null, null, null, null);

            while (crs.moveToNext()){
                int posizioneColonnaNome = crs.getColumnIndex(FIELD_SPESA);

                String prossimaspesa = crs.getString(posizioneColonnaNome);

                int interoprossimaspesa=Integer.parseInt(prossimaspesa);

                sommaspesacasa = sommaspesacasa + interoprossimaspesa;
            }

            crs.close();

            return sommaspesacasa;
        }
        catch (SQLiteException sqle){
            return null;
        }
    }
}



MainActivity

Codice (Java): [Seleziona]
public class MainActivity extends AppCompatActivity {

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


        DBHelper db = new DBHelper(this);

        Integer sommaspesacasa = db.query();

        TextView txtcasa = (TextView) findViewById(R.id.textcasa);
        txtcasa.setText(String.valueOf(sommaspesacasa));
    }
}
« Ultima modifica: 17 Aprile 2016, 22:13:51 CEST da NetGEL, Reason: Merged DoublePost »

Offline MarcoMarco

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
Re:errore nullpointerexception
« Risposta #4 il: 24 Aprile 2016, 09:46:23 CEST »
0
Ho provato il tuo codice è non solo funziona ma è molto più ordinato del mio. Mi hai risolto il problema

Grazie  :-)

Offline NetGEL

  • Utente normale
  • ***
  • Post: 200
  • Respect: +9
    • Google+
    • Mostra profilo
  • Play Store ID:
    NetGEL
Re:errore nullpointerexception
« Risposta #5 il: 24 Aprile 2016, 13:26:31 CEST »
0
Figurati felice di esserti stato di aiuto