2013-04-09 93 views
0

我有一個使用SimpleAdapter的ListView活動。這裏是onCreate:NullPointerException嘗試使用SimpleAdapter進行過濾

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.contact_selection); 
    Intent intent = getIntent(); 
    mContactsList = (ListView) findViewById(R.id.contacts_list); 
    mContactAdapter = new SimpleAdapter(this, getEmailContacts(), R.layout.contact_list_item, 
      new String[] { CONTACT_FIELDS.NAME.toString(), CONTACT_FIELDS.PHOTOURI.toString(), 
        CONTACT_FIELDS.SECONDARY_DATA.toString(), CONTACT_FIELDS.TYPE.toString() }, 
      new int[] { R.id.contact_name, R.id.contact_image, R.id.contact_type_name, 
        R.id.contact_type_name }); 
    mContactsList.setAdapter(mContactAdapter); 
} 

這工作正常;該列表顯示並填寫正確。讓我強調一下 - 問題不在於我的getEmailContacts()方法爲空,因爲此時列表正確地呈現。

我想,雖然加過濾,所以我加入這行後mContactsList.setAdapter嘗試一下:

mContactAdapter.getFilter().filter("Ca"); 

這導致崩潰,與以下堆棧跟蹤:

FATAL EXCEPTION: main 
java.lang.NullPointerException 
    at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93) 
    at android.widget.AdapterView.checkFocus(AdapterView.java:712) 
    at android.widget.AdapterView$AdapterDataSetObserver.onInvalidated(AdapterView.java:835) 
    at android.widget.AbsListView$AdapterDataSetObserver.onInvalidated(AbsListView.java:5966) 
    at android.database.DataSetObservable.notifyInvalidated(DataSetObservable.java:50) 
    at android.widget.BaseAdapter.notifyDataSetInvalidated(BaseAdapter.java:59) 
    at android.widget.SimpleAdapter$SimpleFilter.publishResults(SimpleAdapter.java:383) 
    at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:282) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5041) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    at dalvik.system.NativeStart.main(Native Method) 

有什麼建議嗎?我錯過了真正明顯的東西嗎?

回答

0

似乎你的getEmailContacts()方法正在返回一個空對象。查看SimpleAdapter源代碼,getCount方法只調用mData.size(),其中mData是通過getEmailContacts()方法傳遞給SimpleAdapter構造函數的數據映射列表。

+0

不,情況並非如此。就像我說的,它直到我調用過濾方法才能正常工作。 – Catherine 2013-04-09 20:41:02

+0

嗯,對不起 - 我錯過了你的問題的一部分。我希望這會很容易:)。從查看源代碼看來,過濾器方法將mData對象更改爲FilterResults.values對象。不知怎的,這最終是空的。 – 2013-04-09 21:09:11

+0

是的,但是如何解決這個問題。 ;) – Catherine 2013-04-09 22:07:39