我有一个扩展ListActivity的类我拥有管理数据库项的所有方法:insertItems(),getItems(),showItems()等。当我使用数据库中的项填充此列表视图时,一切都很好。我想要做的是,从另一个活动以相同的方式填充另一个ListView但是当我尝试将光标传递给该活动时,我得到NullPointer异常。我试着把最具代表性的东西。
public class FOO extends ListActivity{
//...
public static DBAdapter items;
@override
public void onCreate(){
//...
items = new DBAdapter(this);
//...
}
public static Cursor getAllItems() {
// TODO Auto-generated method stub
db = items.getReadableDatabase();
return db.query(DBConstants.TABLE_NAME, FROM, null, null, null, null, null);
}
然后,在我的第二项活动中:
public class BAR extends ListActivity{
//.....
public FOO foo = new FOO();
Cursor cursor;
//...
public static DBAdapter items;
@override
public void onCreate(){
//...
items = new DBAdapter(this);
foo.insertItems(//arguments);
this.cursor = foo.getAllItems();
this.startManagingCursor(this.cursor);
ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.item_list, cursor, FROM, TO);
setListAdapter(adapter);
}
我首先得到的是这个错误,其中MainActivity = BAR
E/AndroidRuntime(22923): java.lang.RuntimeException: Unable to start activity ComponentInfo{your.pack.databasae/your.pack.databasae.MainActivity}: java.lang.NullPointerException
答案 0 :(得分:3)
public FOO foo = new FOO();
您永远不应该创建这样的活动,而是根据需要构建活动的框架。如果您需要这样做,请确保在FOO的构造函数中创建items
和db
(典型代码会在onCreate()
中创建它,这将导致NPE在这里)。 BAR中的任何内容都没有调用FOO的onCreate,因此items
并且大概db
都为空。
或者,尝试重构代码,以便数据库管理代码可以在可从两个ListActivity类访问的单独类中使用。
答案 1 :(得分:0)
我建议你再创建两个类:
也许Fragments对你的
来说是个很好的解决方案