Java 带有Pragma table_info的空指针异常

Java 带有Pragma table_info的空指针异常,java,android,Java,Android,在Android项目中,我们希望读取数据库的列信息。 我们找到了带有PRAGMA表信息的示例。 现在我们运行这个应用程序,它失败了,出现了一个NullPointerException,我们不知道为什么会发生这种情况。 这是我们代码的一部分 public String[] getTableColumns(SQLiteDatabase db, String tableName) { Log.d("ArtDbHandler: ", "getTableColumns Start"

在Android项目中,我们希望读取数据库的列信息。 我们找到了带有PRAGMA表信息的示例。 现在我们运行这个应用程序,它失败了,出现了一个NullPointerException,我们不知道为什么会发生这种情况。 这是我们代码的一部分

public String[] getTableColumns(SQLiteDatabase db, String tableName)
    {
        Log.d("ArtDbHandler: ", "getTableColumns Start");
        Cursor cursor = null;
        cursor = db.rawQuery("PRAGMA table_info(" + tableName + ")", null);
        Log.d("ArtDbHandler: ", "getTableColumns cnt:"+cursor.getCount());
        String[] allColumns = new String[cursor.getCount()];
        int i = 1;
        while (!cursor.isAfterLast())
        {
            Log.d("ArtDbHandler: ", "getTableColumns i:"+i);
            String columnName = cursor.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX);
            Log.d("ArtDbHandler: ", "getTableColumns columnName:"+columnName);
            allColumns[i] = columnName;
            ++i;
            cursor.moveToNext();
        }
        cursor.close();
        Log.d("ArtDbHandler: ", "getTableColumns Ende");
        return allColumns;
    }
在LogCat中,我们得到“getTableColumns开始”日志,然后抛出异常。 我们使用sqlitedatabase对象和tablename调用该方法,tablename是在DBHandler类中定义的。 有什么想法吗

谢谢你的帮助。 T

日志: 以下是日志:

  • 12-11 19:03:56.634:D/onCreate Main:(3325):onCreate 12-11
    19:03:56.634:D/MediumDAO:(3325):MediumDAO开始12-11 19:03:56.644: D/MediumDAO:(3325):MediumDAO Ende 12-11 19:03:56.644:
    D/ArtDbHandler:(3325):getTableColumns开始:中等12-11
    19:03:56.644:D/AndroidRuntime(3325):关闭VM 12-11
    19:03:56.644:W/dalvikvm(3325):threadid=1:线程以
    未捕获异常(组=0x40a71930)12-11 19:03:56.664:
    E/AndroidRuntime(3325):致命异常:main 12-11 19:03:56.664:
    E/AndroidRuntime(3325):java.lang.RuntimeException:无法启动
    活动
    ComponentInfo{com.example.artdb/com.example.artdb.ArtDbMainActivity}: java.lang.NullPointerException 12-11 19:03:56.664:
    E/AndroidRuntime(3325):at
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 12-11 19:03:56.664:E/AndroidRuntime(3325):at
    android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 12-11 19:03:56.664:E/AndroidRuntime(3325):at
    android.app.ActivityThread.access$600(ActivityThread.java:141)12-11
    19:03:56.664:E/AndroidRuntime(3325):在
    android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    12-11 19:03:56.664:E/AndroidRuntime(3325):at
    android.os.Handler.dispatchMessage(Handler.java:99)12-11
    19:03:56.664:E/AndroidRuntime(3325):在
    android.os.Looper.loop(Looper.java:137)12-11 19:03:56.664:
    E/AndroidRuntime(3325):at
    android.app.ActivityThread.main(ActivityThread.java:5041)12-11
    19:03:56.664:E/AndroidRuntime(3325):在
    java.lang.reflect.Method.Invokenactive(本机方法)12-11
    19:03:56.664:E/AndroidRuntime(3325):在
    java.lang.reflect.Method.invoke(Method.java:511)12-11 19:03:56.664:
    E/AndroidRuntime(3325):at
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 12-11 19:03:56.664:E/AndroidRuntime(3325):at
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)12-11
    19:03:56.664:E/AndroidRuntime(3325):在
    dalvik.system.Nativestar.main(本地方法)12-11 19:03:56.664:
    E/AndroidRuntime(3325):由以下原因引起:java.lang.NullPointerException
    12-11 19:03:56.664:E/AndroidRuntime(3325):at
    ArtDbHandler.getTableColumns(ArtDbHandler.java:182) 12-11 19:03:56.664:E/AndroidRuntime(3325):at
    com.example.artdb.MediumDAO.setColumns(MediumDAO.java:101)12-11
    19:03:56.664:E/AndroidRuntime(3325):在
    com.example.artdb.ArtDbMainActivity.onCreate(ArtDbMainActivity.java:20) 12-11 19:03:56.664:E/AndroidRuntime(3325):at
    android.app.Activity.performCreate(Activity.java:5104)12-11
    19:03:56.664:E/AndroidRuntime(3325):在
    android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 12-11 19:03:56.664:E/AndroidRuntime(3325):at
    android.app.ActivityThread.performLaunchActivity(ActivityThre


ad.java:2144)

问题是数据库的初始化。在我们进行查询时,数据库没有打开。
Thx Elltz和laalto需要帮助

您也可以发布日志猫吗..好的,这是日志猫,在主帖子中,您如何初始化作为参数传递的
db
变量?getTableColumns中的第182行是什么?对不起,第182行是什么意思?使用此方法的返回值,我们希望构建一个class属性,该属性包含sqlite db中相应表的所有列。异常必须由以下行引发:db.rawQuery。在这之后我们没有得到日志。在此之后,带有curser.getString的行已关闭。
If (TABLE_INFO_PRAGMA_COLUMNNAME_INDEX != null) String columnName = cursor.getString(TABLE_INFO_PRAGMA_COLUMNNAME_INDEX);