2011-03-16 47 views
1

我正在處理的應用程序是由聯繫人組織的筆記集合。我在使用遊標查詢數據庫以獲取正確的信息行時遇到問題。主要活動是基於Contacts URI的聯繫人列表。單擊一個聯繫人將Contact _ID作爲意向字符串傳遞。我想傳遞字符串到遊標中,只顯示contactId鍵匹配意圖字符串的行,但每次傳遞字符串時,我都會得到「NumberFormatException:無法解析'null'作爲整數。」我知道意圖正在經歷,因爲我創建了一個菜單項,它使用intent字符串生成一個吐司消息,每次都可以正常工作,而且在使用ID對參數進行硬編碼時,光標可以正常工作。我只是不知道哪裏出了問題!我只用了大概一週半的時間就可以使用Android,所以非常簡單。任何幫助是極大的讚賞。我的代碼如下。Android數據庫 - 將意圖字符串傳遞到光標

這是應顯示的數據的過濾行該活動:

public class NotesList extends ListActivity { 
    public MyDbAdapter db; 
    public String mIntentString, contactId; 
    public int mIntentInt; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     db = new MyDbAdapter(this); 
     db.open(); 
     fillData(); 
     Bundle extras = getIntent().getExtras(); 
     mIntentString = extras.getString("contactId"); 
     contactId = extras.getString("contactId"); 
    } 

    private void fillData() { 
     Cursor mCursor = db.fetchNotesForContact(contactId); 
     startManagingCursor(mCursor); 
     ListAdapter adapter = new SimpleCursorAdapter(
       this, 
       android.R.layout.two_line_list_item, 
       mCursor, 
       new String[] {MyDbAdapter.KEY_TITLE, MyDbAdapter.KEY_DATETIME}, 
       new int[] {android.R.id.text1, android.R.id.text2}); 
     setListAdapter(adapter); 
    } 

這是被稱爲光標的代碼,以及從「使用ContactID」改變參數時,說「139」,接觸筆記返回:

public Cursor fetchNotesForContact(String contactId) { 
    String[] columns = {KEY_ROWID, KEY_CONTACTID, KEY_TITLE, KEY_BODY, KEY_DATETIME}; 
    String projection = ("contactId = ?"); 
    String[] arguments = {contactId}; 
    return mDb.query(DATABASE_TABLE, columns, projection, arguments, null, null, null); 
} 
+0

你的contactId列的數據類型是什麼 – 2011-03-16 07:17:32

+0

contactId是一個整數。我曾考慮將其更改爲字符串,但不確定是否會有任何反響,因爲ContactsContract.Contacts._ID是一個整數。不知道它是否真的很重要。 – 2011-03-16 07:32:56

回答

1

的問題是,您呼叫fillData()方法的ContactID有其價值之前。所以它的null也在fetchNotesForContact

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    db = new MyDbAdapter(this); 
    db.open(); 
    //fillData(); move this 
    Bundle extras = getIntent().getExtras(); 
    mIntentString = extras.getString("contactId"); 
    contactId = extras.getString("contactId"); 
    fillData(); //to here 
} 

希望有幫助。

+0

明白了。謝謝您的幫助。我對編程還很陌生,所以像這樣的小事情讓我感到不快。 – 2011-03-16 15:28:49

+0

Beleave me ...這種錯誤與編程經驗的時間無關。這是一個典型的錯誤,你在自己的代碼上幾小時和幾小時主演,卻無法找出錯誤。然後有人進入房間並直接指向錯誤的線路。 (對我來說經常發生:-)) – Chris 2011-03-16 15:31:28

+0

哈哈很高興知道。 – 2011-03-18 00:21:17

相關問題