Note that there are some explanatory texts on larger screens.

plurals
  1. POjava.lang.NullPointerException error on a query
    text
    copied!<p>i'm ready to develop my second app for android, and I want to use the database. But I'm blocked by an error.</p> <p>This is the class:</p> <pre><code>public class MyDatabase { SQLiteDatabase mDb; DbHelper mDbHelper; Context mContext; private static final String DB_NAME="epsoftsms";//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(); } //i seguenti 2 metodi servono per la lettura/scrittura del db. aggiungete e modificate a discrezione // consiglio:si potrebbe creare una classe Prodotto, i quali oggetti verrebbero passati come parametri dei seguenti metodi, rispettivamente ritornati. Lacio a voi il divertimento public void inserimentoParametri(String parametro,String valore){ //metodo per inserire i dati ContentValues cv=new ContentValues(); cv.put(ParametriMetaData.PARAMETRO, parametro); cv.put(ParametriMetaData.VALORE, valore); mDb.insert(ParametriMetaData.TAB_PARAMETRI, null, cv); } public Cursor listaParametri(){ //metodo per fare la query di tutti i dati return mDb.query(ParametriMetaData.TAB_PARAMETRI, null,null,null,null,null,null); } static class ParametriMetaData { // i metadati della tabella, accessibili ovunque static final String TAB_PARAMETRI = "parametri"; static final String PARAMETRO = "_parametro"; static final String VALORE = "valore"; } private static final String CREA_TAB_PARAMETRI = "CREATE TABLE IF NOT EXISTS " //codice sql di creazione della tabella + ParametriMetaData.TAB_PARAMETRI + " (" + ParametriMetaData.PARAMETRO+ " text primary key, " + ParametriMetaData.VALORE + " 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); } public SQLiteDatabase getWritableDatabase() { // TODO Auto-generated method stub return null; } @Override public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella _db.execSQL(CREA_TAB_PARAMETRI); } @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 } } } </code></pre> <p>And this is part of main interested:</p> <pre><code> final MyDatabase db=new MyDatabase(getApplicationContext()); db.open(); //apriamo il db if (db.listaParametri().getCount()==0) { } </code></pre> <p>When I launch the app it return the following errors:</p> <pre><code>06-08 14:04:40.197: E/AndroidRuntime(1149): Uncaught handler: thread main exiting due to uncaught exception 06-08 14:04:40.207: E/AndroidRuntime(1149): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.axiomatic.epsoft.sms/it.axiomatic.epsoft.sms.EpsoftSMSActivity}: java.lang.NullPointerException 06-08 14:04:40.207: E/AndroidRuntime(1149): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268) 06-08 14:04:40.207: E/AndroidRuntime(1149): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) 06-08 14:04:40.207: E/AndroidRuntime(1149): at android.app.ActivityThread.access$1800(ActivityThread.java:112) 06-08 14:04:40.207: E/AndroidRuntime(1149): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) 06-08 14:04:40.207: E/AndroidRuntime(1149): at android.os.Handler.dispatchMessage(Handler.java:99) 06-08 14:04:40.207: E/AndroidRuntime(1149): at android.os.Looper.loop(Looper.java:123) 06-08 14:04:40.207: E/AndroidRuntime(1149): at android.app.ActivityThread.main(ActivityThread.java:3948) 06-08 14:04:40.207: E/AndroidRuntime(1149): at java.lang.reflect.Method.invokeNative(Native Method) 06-08 14:04:40.207: E/AndroidRuntime(1149): at java.lang.reflect.Method.invoke(Method.java:521) 06-08 14:04:40.207: E/AndroidRuntime(1149): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 06-08 14:04:40.207: E/AndroidRuntime(1149): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 06-08 14:04:40.207: E/AndroidRuntime(1149): at dalvik.system.NativeStart.main(Native Method) 06-08 14:04:40.207: E/AndroidRuntime(1149): Caused by: java.lang.NullPointerException 06-08 14:04:40.207: E/AndroidRuntime(1149): at it.axiomatic.epsoft.sms.MyDatabase.listaParametri(MyDatabase.java:50) 06-08 14:04:40.207: E/AndroidRuntime(1149): at it.axiomatic.epsoft.sms.EpsoftSMSActivity.onCreate(EpsoftSMSActivity.java:30) 06-08 14:04:40.207: E/AndroidRuntime(1149): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 06-08 14:04:40.207: E/AndroidRuntime(1149): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231) 06-08 14:04:40.207: E/AndroidRuntime(1149): ... 11 more </code></pre> <p>What's the problem? Tnx and forgive me for some error, it's my first requesto on Stackoverflow.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload