2

你能帮我做这个吗?即使我知道数据库中存在数据,我也不知道为什么会出现空指针异常。我要做的是访问类中的一个方法,该方法用于获取数据库中给定报告代码的所有信息。但它不断给我空指针异常。这是我指的方法:

  • 我通过这个调用不同类的方法:

    S_9th_ISubmit a = new S_9th_ISubmit();

    a.上传();

  • 这是我正在调用的方法

    public void Uploading()
    {
    
    for (int i = 0; i < Constants.ARRAYLIST_REPORTCODES.size(); i++) 
    {
        Log.d("size:", String.valueOf(Constants.ARRAYLIST_REPORTCODES.size()));
        Log.d("content", String.valueOf(Constants.ARRAYLIST_REPORTCODES));
    
        final String code = Constants.ARRAYLIST_REPORTCODES.get(i).toString();
        Log.d("Uploading contents of Report Code: ", code);
    
        Cursor details = databaseHandler.getHeaderDetails(code);
    
    
        final String infotype   = details.getString(details.getColumnIndex(Constants.REPORT_INFOTYPECODE));
        String district         = details.getString(details.getColumnIndex(Constants.REPORT_DISTRICTCODE));
        final String province   = details.getString(details.getColumnIndex(Constants.REPORT_PROVINCECODE));
        final String date       = details.getString(details.getColumnIndex(Constants.REPORT_DATEOBSERVED));
        final String competitor = details.getString(details.getColumnIndex(Constants.REPORT_ISCOMPETITOR));
        final String remarks    = details.getString(details.getColumnIndex(Constants.REPORT_REMARKS));
    

    }

我需要打开数据库才能访问数据库吗?下面显示了我的 logcat。

09-12 08:43:52.250: E/AndroidRuntime(14919): FATAL EXCEPTION: main
09-12 08:43:52.250: E/AndroidRuntime(14919): java.lang.NullPointerException
09-12 08:43:52.250: E/AndroidRuntime(14919):    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
09-12 08:43:52.250: E/AndroidRuntime(14919):    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149)
09-12 08:43:52.250: E/AndroidRuntime(14919):    at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:223)
09-12 08:43:52.250: E/AndroidRuntime(14919):    at com.dfd.ireport.DatabaseHandler.getHeaderDetails(DatabaseHandler.java:437)
09-12 08:43:52.250: E/AndroidRuntime(14919):    at com.dfd.ireport.S_9th_ISubmit.Uploading(S_9th_ISubmit.java:1137)

这是我的 databaseHandler 中的代码

public Cursor getHeaderDetails(String code){
    SQLiteDatabase dbSqlite = this.getReadableDatabase();
    Cursor c = dbSqlite.query(Constants.TABLE_REPORT, new String[] { Constants.REPORT_ID, 
            Constants.REPORT_CODE, 
            Constants.REPORT_INFOTYPECODE, 
            Constants.REPORT_DISTRICTCODE, 
            Constants.REPORT_PROVINCECODE, 
            Constants.REPORT_DATEOBSERVED,
            Constants.REPORT_ISCOMPETITOR, 
            Constants.REPORT_REMARKS}, Constants.REPORT_CODE+"=?", new String[]{code}, null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    dbSqlite.close();
    return c;
}

我试图在我的上传方法中添加它来访问数据库,但什么也没发生。我还需要做什么,如何检查我得到的上下文?

 DatabaseHandler databaseHandler;
        databaseHandler = new DatabaseHandler(this);
        if (databaseHandler != null)
        {
            databaseHandler.close();
            databaseHandler.createDB();
        }
4

2 回答 2

3

我的猜测是SQLiteDatabase dbSqlite = this.getReadableDatabase();,dbSqlite 为空!getReadableDatabase() 返回 null 因为您传递了错误的上下文。
尝试检查您传递的上下文。

于 2013-09-12T01:00:54.587 回答
0

光标详细信息 = databaseHandler.getHeaderDetails(code) 显示空点。

问题是databaseHandler为空,你可以用

Cursor details;
if(databaseHandler != null){
    details = databaseHandler.getHeaderDetails(code);
}else{
    Log.e(" databaseHandler : " ," databaseHandler == null");
}

如果 getHeaderDetails() 中的问题,logcat 将显示导致空点异常的代码行,但我没有看到

于 2013-09-12T01:59:48.457 回答