NullPointException不知道为什么?
请看看这段代码,看看你能不能帮我一把。 viewItem从数据库填充,并且方法fillRemindersData(long rowId)仅从提醒类中调用。我不知道为什么我调用viewitems.fillRemindersData()方法时得到一个nullPointerException。如果我评论该行,代码工作正常,rowId是正确的。可能是什么原因?感谢NullPointException不知道为什么?
// this is a reminder class
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_list);
adapter = new DBAdapter(this);
viewItems = new ViewItems();
fillReminder();
}
private void fillReminder() {
Bundle extra = getIntent().getExtras();
if(extra != null){
rowId = extra.getLong(DBAdapter.KEY_ID);
message = extra.getString(NewItem.Test);
}
Toast.makeText(this, message + "its ok here" + rowId, Toast.LENGTH_LONG).show();
viewItems.fillRemindersData(rowId); // having a null pointer exception here.
}
而且viewItems类的重要组成部分是:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_list);
adapter = new DBAdapter(this);
adapter.open();
fillData();
list = (ListView)findViewById(android.R.id.list);
list.setOnItemClickListener(this);
}
protected void fillData() {
Cursor c = adapter.retrieveItems(); // method in sqlitedatabase
startManagingCursor(c);
String[] from = new String[]{DBAdapter.NAME, DBAdapter.START_DATE, DBAdapter.START_TIME};
int[] to = new int[]{R.id.viewNameId, R.id.viewDateId, R.id.viewTimeId};
customCursorAdapter items = new customCursorAdapter(this, R.layout.view_items, c, from, to);
setListAdapter(items);
}
protected void fillRemindersData(long Id) {
long row = Id;
Cursor c = adapter.retrieveRow(row); // method in sqlitedatabase
startManagingCursor(c);
String[] from = new String[]{DBAdapter.NAME, DBAdapter.START_DATE, DBAdapter.START_TIME};
int[] to = new int[]{R.id.RemindNameId, R.id.remindDateId, R.id.remindTimeId};
customCursorAdapter items = new customCursorAdapter(this, R.layout.remind_viewer, c, from, to);
setListAdapter(items);
}
方法的logcat指的是:
public Cursor retrieveRow(long rowId){
String[] resultColumns = new String[] {NAME,START_DATE,START_TIME};
Cursor row = db.query(true,DATABASE_TABLE, resultColumns, KEY_ID +"=" +rowId, null, null, null, null,null);
if(row != null){
row.moveToNext();
return row;
}
return row;
}
logcat的输出:
09-22 15:19:00.346: ERROR/AndroidRuntime(808): Uncaught handler: thread main exiting due to uncaught exception
09-22 15:19:00.386: ERROR/AndroidRuntime(808): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.MemoBuzz/com.MemoBuzz.RemindViewer}: java.lang.NullPointerException
09-22 15:19:00.386: ERROR/AndroidRuntime(808): Caused by: java.lang.NullPointerException
09-22 15:19:00.386: ERROR/AndroidRuntime(808): at com.MemoBuzz.ViewItems.fillRemindersData(ViewItems.java:57)
09-22 15:19:00.386: ERROR/AndroidRuntime(808): at com.MemoBuzz.RemindViewer.fillReminder(RemindViewer.java:51)
09-22 15:19:00.386: ERROR/AndroidRuntime(808): at com.MemoBuzz.RemindViewer.onCreate(RemindViewer.java:36)
09-22 15:19:00.386: ERROR/AndroidRuntime(808): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
09-22 15:19:00.386: ERROR/AndroidRuntime(808): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
09-22 15:19:00.386: ERROR/AndroidRuntime(808): ... 11 more
你试图开始一项活动viewItems = new ViewItems();
? ViewItem是一个活动类吗?你有一个onCreate()。你需要开始一个有目的的活动,而不是new
它看起来像onCreate()
方法ViewItems
永远不会调用你的情况。因此,适配器为空,你会得到异常。可能你必须将数据库对象从ViewItems
类中取出,因为现在它看起来像一个活动或服务(如果这是在其上调用构造函数的情况,就像你一样,绝对是个坏主意)。
.hmm ..不太确定你的意思。因为ViewItems类是已经从数据库对象和光标适配器填充的listActivity。我只想使用从第一个地方的ViewItems类获得的rowId从fillRemindersData()方法填充另一个列表视图。 (rowId通过不同的活动回到这里。) – irobotxxx 2010-09-22 17:30:10
正如我所说的,我需要其他数据库对象在我的课程中调用它们的方法。 – irobotxxx 2010-09-22 17:40:27
或者我应该只复制ViewItems类并将其编辑为仅为fillRemindersData()方法调用。但这听起来不对? – irobotxxx 2010-09-22 17:44:59
stacktrace怎么样,fillRemindersData中的哪行是发生异常? – schwiz 2010-09-22 16:15:40
请发布LogCat输出。 – 2010-09-22 16:15:44