一个查询显示java.lang.NullPointerException错误 [英] java.lang.NullPointerException error on a query
问题描述
我已经准备好开发我的第二个应用程序为Android,我想使用的数据库。但我阻止了错误。
i'm ready to develop my second app for android, and I want to use the database. But I'm blocked by an error.
这是类:
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
}
}
}
这是主要感兴趣的一部分:
And this is part of main interested:
final MyDatabase db=new MyDatabase(getApplicationContext());
db.open(); //apriamo il db
if (db.listaParametri().getCount()==0)
{
}
当我启动应用程序它返回以下错误:
When I launch the app it return the following errors:
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
这是什么问题? TNX和原谅我的一些误差,这是我的#2第一requesto。
What's the problem? Tnx and forgive me for some error, it's my first requesto on Stackoverflow.
推荐答案
这是你的问题:
public SQLiteDatabase getWritableDatabase() {
// TODO Auto-generated method stub
return null;
}
您正在覆盖SQLiteDatabase类 getWritableDatabase
方法,做什么也没有(不打开数据库或任何东西)的和的返回null,从而使导致了NPE。
You are overriding the SQLiteDatabase class getWritableDatabase
method and doing nothing in it (not opening the database or anything) and returning null, so that leads to an NPE.
删除方法和你的NPE应该走了。
Delete that method and your NPE should go away.
这篇关于一个查询显示java.lang.NullPointerException错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!