Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java.lang.NullPointerException在SQLiteDatabase.execSQL_Java_Android_Nullpointerexception_Android Sqlite - Fatal编程技术网

Android java.lang.NullPointerException在SQLiteDatabase.execSQL

Android java.lang.NullPointerException在SQLiteDatabase.execSQL,java,android,nullpointerexception,android-sqlite,Java,Android,Nullpointerexception,Android Sqlite,我有一个DbHelper类,它扩展了SQLiteOpenHelper,并试图在方法onUpgrade()上创建一个db升级系统,但在执行第一个查询时,它显示了一个NullPointerException 我的onUpgrade代码是: @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { SysLog("upgrading Db from "+oldVers

我有一个DbHelper类,它扩展了SQLiteOpenHelper,并试图在方法onUpgrade()上创建一个db升级系统,但在执行第一个查询时,它显示了一个NullPointerException

我的onUpgrade代码是:

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        SysLog("upgrading Db from "+oldVersion+" to "+newVersion);
        if (db == null){
            ErrorLog("Errore nel Db", "db is null");
            $.finish();
            return;
        }
        db.beginTransaction();
        try {
            int i = oldVersion;
            if (oldVersion != newVersion){
                exportDB();
            }
            while(i < newVersion){
                ArrayList<String> qs = getSqlAlterDb(i);
                for (int z = 0; z < qs.size(); z++){
                    SysLog(qs.get(z));
                    db.execSQL(qs.get(z));
                }
                i++;
            }
            db.setTransactionSuccessful();
        }catch (Exception e){
            ErrorLog(e);
        }finally {
            if (db.inTransaction()) {
                db.endTransaction();
            }
        }
@覆盖
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
SysLog(“将数据库从“+oldVersion+”升级到“+newVersion”);
if(db==null){
ErrorLog(“Errore nel Db”,“Db为空”);
$.finish();
返回;
}
db.beginTransaction();
试一试{
int i=旧版本;
如果(旧版本!=新版本){
exportDB();
}
而(i
这是我的错误日志:

W/System.err: ---------[|__java.lang.NullPointerException]
W/System.err: ---------[    |__android.database.DatabaseUtils.getSqlStatementType(DatabaseUtils.java:1363)]
W/System.err: ---------[    |__android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1781)]
W/System.err: ---------[    |__android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1725)]
W/System.err: ---------[    |__wproject.barcodegest.db.DbHelper.onUpgrade(DbHelper.java:177)]
W/System.err: ---------[    |__android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:257)]
W/System.err: ---------[    |__android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)]
W/System.err: ---------[    |__wproject.barcodegest.db.DbManager.query(DbManager.java:306)]
W/System.err: ---------[    |__wproject.barcodegest.widget.user.UserGestorObj.inizialize(UserGestorObj.java:76)]
W/System.err: ---------[    |__wproject.barcodegest.widget.user.UserGestorObj.<init>(UserGestorObj.java:57)]
W/System.err: ---------[    |__wproject.barcodegest.MainActivity.onCreate(MainActivity.java:97)]
W/System.err: ---------[    |__android.app.Activity.performCreate(Activity.java:5372)]
W/System.err: ---------[    |__android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)]
W/System.err: ---------[    |__android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)]
W/System.err: ---------[    |__android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)]
W/System.err: ---------[    |__android.app.ActivityThread.access$700(ActivityThread.java:159)]
W/System.err: ---------[    |__android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)]
W/System.err: ---------[    |__android.os.Handler.dispatchMessage(Handler.java:99)]
W/System.err: ---------[    |__android.os.Looper.loop(Looper.java:176)]
W/System.err: ---------[    |__android.app.ActivityThread.main(ActivityThread.java:5419)]
W/System.err: ---------[    |__java.lang.reflect.Method.invokeNative(Native Method)]
W/System.err: ---------[    |__java.lang.reflect.Method.invoke(Method.java:525)]
W/System.err: ---------[    |__com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)]
W/System.err: ---------[    |__com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)]
W/System.err: ---------[    |__dalvik.system.NativeStart.main(Native Method)]
W/System.err:-----------[|uu java.lang.NullPointerException]
W/System.err:-----------[|uuÈandroid.database.DatabaseUtils.getSqlStatementType(DatabaseUtils.java:1363)]
W/System.err:-----------[|uuÈandroid.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1781)]
W/System.err:-----------[|uuÈandroid.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1725)]
W/System.err:-----------[|uwproject.barcodegest.db.DbHelper.onUpgrade(DbHelper.java:177)]
W/System.err:-----------[|uuu android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:257)]
W/System.err:-----------[|uuÈandroid.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)]
W/System.err:-----------[|uwproject.barcodegest.db.DbManager.query(DbManager.java:306)]
W/System.err:-----------[|uwproject.barcodegest.widget.user.UserGestorObj.inazialize(UserGestorObj.java:76)]
W/System.err:-----------[|uwproject.barcodegest.widget.user.UserGestorObj.(UserGestorObj.java:57)]
W/System.err:-----------[|uwproject.barcodegest.MainActivity.onCreate(MainActivity.java:97)]
W/System.err:-----------[|uuÈandroid.app.Activity.performCreate(Activity.java:5372)]
W/System.err:-----------[|uuu android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)]
W/System.err:-----------[|uuÈandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)]
W/System.err:-----------[|uuÈandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)]
W/System.err:-----------[| uuÈandroid.app.ActivityThread.access$700(ActivityThread.java:159)]
W/System.err:-----------[|u_Èandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)]
W/System.err:-----------[|uuu android.os.Handler.dispatchMessage(Handler.java:99)]
W/System.err:-----------[| uuu android.os.Looper.loop(Looper.java:176)]
W/System.err:-----------[|uuÈandroid.app.ActivityThread.main(ActivityThread.java:5419)]
W/System.err:-----------[|_java.lang.reflect.Method.invokenactive(本机方法)]
W/System.err:-----------[|_java.lang.reflect.Method.invoke(Method.java:525)]
W/System.err:-----------[|u com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)]
W/System.err:-----------[|u com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)]
W/System.err:-----------[|u dalvik.System.NativeStart.main(本机方法)]

我已经测试了这个版本,如果db为null或者查询为null。我有所有需要的或者我知道如何测试的东西。我确信qs.get()返回一个共同查询。我确信db不是空的。正如日志所说,当我试图获取db的状态时,问题似乎来自数据库utils。

根据的源代码,该方法中NPE的唯一可能原因是收到的参数
sql
为空。查看
qs
列表的co然后尝试一些防御性编程,以确保没有空值作为参数发送:

String sql=qs.get(z);
if (sql!=null)
{
    db.execSQL(sql);
}

可能重复的
qs.get(z)
…是什么?似乎为空发布您的查询请打印qs.get(z)的内容看起来你得到了一个空值object@Zoronel是的,错了:如果你把一个
null
作为参数传递,JVM不会抛出NPE;这是合法的。它只会在你尝试去引用一个null引用时抛出NPE:也就是说,如果你试图调用一个null引用上的某个方法。不需要约束自己,我的朋友。每个人都会犯错误。