【问题标题】:Null Pointer Exception after inserting and reading from database插入和读取数据库后出现空指针异常
【发布时间】:2014-05-23 15:21:17
【问题描述】:

我在这里尝试写入数据库并读取并将它们加载到ArrayList,然后列表中的元素应该添加到AutoCompleteTextView,但它似乎显示NullPointerException

这是代码。

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    tweetPost = new Tweet();
        setIssueTypeToDatabase("Accident");
        setIssueTypeToDatabase("Fire");
        setIssueTypeToDatabase("Local Utility Problem");
        setIssueTypeToDatabase("Theft");
        setIssueTypeToDatabase("Technological Problem");


    postBox = (EditText) findViewById(R.id.post);
    log.debug(postBox);
    issue = (AutoCompleteTextView) findViewById(R.id.autocomplete_issue);
    log.debug(issue);
    setIssueTypeFromDatabaseToList();
    adapterA = new ArrayAdapter(this,
            android.R.layout.simple_list_item_1, IssueTypeList);

    issue.setAdapter(adapterA);
    }


private void setIssueTypeToDatabase(String issue) {
    SQLiteDatabase db = issueTypeDatabase.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(IssueTypeDatabase.C_Issue, issue);
    db.insertOrThrow(IssueTypeDatabase.TABLE, null, values);

}

private void setIssueTypeFromDatabaseToList() {
    SQLiteDatabase db = issueTypeDatabase.getReadableDatabase();
    Cursor cursor = db.query(IssueTypeDatabase.TABLE, FROM, null, null, null, null,
            ORDER_BY);
    startManagingCursor(cursor);
    showEvents(cursor);
}

private void showEvents(Cursor cursor) {
    log.debug("showEvents()");
    // Stuff them all into a big string
    setContentView(R.layout.database);
    while (cursor.moveToNext()) {
        // Could use getColumnIndexOrThrow() to get indexes
        issueTypesFound = cursor.getString(1);

        IssueTypeList.add(issueTypesFound);


    }
    cursor.close();
}


    public class IssueTypeDatabase extends SQLiteOpenHelper{


    // Static Final Variable database meta information

    static final String DATABASE = "IssueType.db";
    static final int VERSION =4;
    public static final String TABLE = "IssueTypeTable";
    static final String TABLE_DEPT = "Issue_Dept";

    public static final String C_ID = "_id";
    public static final String C_Issue = "issue";

    private static final Logger log = Logger.getLogger(IssueTypeDatabase.class);
    // Override constructor
    public IssueTypeDatabase(Context context) {

        super(context, DATABASE, null, VERSION);
        log.debug("IssueTypeDatabse()");

    }

    // Override onCreate method
    @Override
    public void onCreate(SQLiteDatabase db) {
        log.debug("onCreate()");
        db.execSQL("CREATE TABLE " + TABLE + " ( " + C_ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT, " + C_Issue + " TEXT"+");");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        log.debug("onUpgrade()>>SQLiteDatabase={}",DATABASE);
        // Drop old version table
        db.execSQL("DROP TABLE IF EXISTS " + TABLE);

        // Create New Version table
        onCreate(db);
    }
}

还有日志:

【问题讨论】:

  • 我在这里也看到你在同一个光标上有一个 startManagingCursor 和一个 cursor.close(),我不认为它们不应该一起使用。
  • 谢谢,我删除了 cursor.close() 并稍作修改,它可以工作:)

标签: android arraylist nullpointerexception


【解决方案1】:

我终于发现了错误是什么,cursor.close() 导致了这个问题,我又犯了另一个愚蠢的错误,我在我的 showEvents() 方法中设置了一个布局,这导致屏幕快速变化。 所以删除 cursor.close() 和 setContentView(R.layout.database) 就可以了。

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多