因此,我最近將大部分JSON解析轉換爲GSON,因爲它是一種非常乾淨的編寫代碼和性能的方法。切換到GSON後空列表的空適配器
但是,現在當任何listView爲空時,設置適配器時會發生崩潰。
注:我已經使用lv.setEmptyView();
在我task
,我收集與GSON
網絡數據,並將它們塞進ArrayList<Object>
。
像這樣:
// parse result
Gson gson = new Gson();
Type collectionType = new TypeToken<List<Item>>() {}.getType();
ArrayList<Item> myItemsList = gson.fromJson(result.toString(), collectionType);
在我
onPostExecute()
,當我設置
adapter
這樣
然後:
if (getActivity() != null) {
miAdapter = new MyItemsAdapter(getActivity(), myItemsList,user_num);
lv.setAdapter(miAdapter); // NULL POINTER HERE IF LIST IS EMPTY
}
我得到了nullpointer
時,此列表爲空:
這裏確切LogCat
:
04-06 10:21:31.426: E/AndroidRuntime(17691): FATAL EXCEPTION: main
04-06 10:21:31.426: E/AndroidRuntime(17691): Process: com.---.---, PID: 17691
04-06 10:21:31.426: E/AndroidRuntime(17691): java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
04-06 10:21:31.426: E/AndroidRuntime(17691): at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)
04-06 10:21:31.426: E/AndroidRuntime(17691): at android.widget.ListView.setAdapter(ListView.java:487)
04-06 10:21:31.426: E/AndroidRuntime(17691): at com.---.---.MyItemsFragment$MyItemTask.onPostExecute(MyItemsFragment.java:131)
04-06 10:21:31.426: E/AndroidRuntime(17691): at com.---.---.MyItemsFragment$MyItemTask.onPostExecute(MyItemsFragment.java:77)
04-06 10:21:31.426: E/AndroidRuntime(17691): at android.os.AsyncTask.finish(AsyncTask.java:632)
04-06 10:21:31.426: E/AndroidRuntime(17691): at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-06 10:21:31.426: E/AndroidRuntime(17691): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
04-06 10:21:31.426: E/AndroidRuntime(17691): at android.os.Handler.dispatchMessage(Handler.java:102)
04-06 10:21:31.426: E/AndroidRuntime(17691): at android.os.Looper.loop(Looper.java:135)
04-06 10:21:31.426: E/AndroidRuntime(17691): at android.app.ActivityThread.main(ActivityThread.java:5312)
04-06 10:21:31.426: E/AndroidRuntime(17691): at java.lang.reflect.Method.invoke(Native Method)
04-06 10:21:31.426: E/AndroidRuntime(17691): at java.lang.reflect.Method.invoke(Method.java:372)
04-06 10:21:31.426: E/AndroidRuntime(17691): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
04-06 10:21:31.426: E/AndroidRuntime(17691): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
正在設置adapter
,但是如何在傳遞任何空列表時收到此錯誤?
- 注意:我剛剛發現這個錯誤後,我轉換一切
GSON
。不過,我接受這樣的想法,即在此之前它可能已經存在,所以也許唯一相關的問題是空列表和adapter
而不是GSON
本身。
您可以使用'setEmptyview'處理空虛。 http://cyrilmottier.com/2011/06/20/listview-tips-tricks-1-handle-emptiness/。但你應該檢查爲什麼你的列表是空的,並修復它 – Raghunandan
@Raghunandan我實際上正在使用'setEmptyView'(我編輯上面做筆記)。另外,在這些情況下,「ListView」是空的是完全合法的。 – KickingLettuce
下面的博客文章應該有助於縮小問題 – Raghunandan