【发布时间】: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