2010-09-22 121 views
0

請看看這段代碼,看看你能不能幫我一把。 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 
+1

stacktrace怎麼樣,fillRemindersData中的哪行是發生異常? – schwiz 2010-09-22 16:15:40

+0

請發佈LogCat輸出。 – 2010-09-22 16:15:44

回答

0

你試圖開始一項活動viewItems = new ViewItems();? ViewItem是一個活動類嗎?你有一個onCreate()。你需要開始一個有目的的活動,而不是new

+0

沒有執行,我試圖實例化它,所以我可以調用fillRemindersData方法。 – irobotxxx 2010-09-22 16:52:11

+0

是的,viewitems擴展了listActivity。 – irobotxxx 2010-09-22 16:53:11

+0

您不應該在擴展活動的類上調用'new'。如果你需要一個類對象,創建一個新類,不要嘗試重用活動 – Falmarri 2010-09-22 18:36:08

0

它看起來像onCreate()方法ViewItems永遠不會調用你的情況。因此,適配器爲空,你會得到異常。可能你必須將數據庫對象從ViewItems類中取出,因爲現在它看起來像一個活動或服務(如果這是在其上調用構造函數的情況,就像你一樣,絕對是個壞主意)。

+0

.hmm ..不太確定你的意思。因爲ViewItems類是已經從數據庫對象和光標適配器填充的listActivity。我只想使用從第一個地方的ViewItems類獲得的rowId從fillRemindersData()方法填充另一個列表視圖。 (rowId通過不同的活動回到這裏。) – irobotxxx 2010-09-22 17:30:10

+0

正如我所說的,我需要其他數據庫對象在我的課程中調用它們的方法。 – irobotxxx 2010-09-22 17:40:27

+0

或者我應該只複製ViewItems類並將其編輯爲僅爲fillRemindersData()方法調用。但這聽起來不對? – irobotxxx 2010-09-22 17:44:59

0

在我看來,您並未將您的活動添加到您的清單。

+0

是的,我做到了。 – irobotxxx 2010-09-22 17:35:05

相關問題