如果ListView为空,为什么会崩溃?

时间:2014-08-22 17:50:10

标签: android listview expandablelistview

在我的应用程序中,我有一个listView:

lv = (ExpandableListView) v.findViewById(R.id.listOfShifts);

当我setAdapter时:

adapter = new ExpandableListCustom(getActivity(), fullList,temp);
lv.setAdapter(adapter); 

它会崩溃但是如果" fullList和temp"不是空的它工作得很好.. 如何克服崩溃,如果列表为空,屏幕上没有任何内容,也没有崩溃..

// ExpandableListCustom.class:

private Context context;
    private HashMap<ArrayList<ClockModel>,ArrayList<ClockModel> > fullList; //Headers
    ArrayList<ClockModel> child; //data

    public ExpandableListCustom(Context context,
            HashMap<ArrayList<ClockModel>, ArrayList<ClockModel>> fullList,
            ArrayList<ClockModel> child) {
        super();
        this.context = context;
        this.fullList = fullList;
        this.child = child;
        clockSet = new Clock();
    }

这是我获取适配器值的方法

hand = new DbHandler(getActivity());
        fullList = new HashMap<ArrayList<ClockModel>, ArrayList<ClockModel>>();
         temp = new ArrayList<ClockModel>();
     ArrayList<ClockModel> child = new ArrayList<ClockModel>();
    child = hand.getDay(workName);

    for (int i = 0; i < child.size(); i++) {

        if(child.get(i).getDateMonth() == month){
        ClockModel m1 = new ClockModel(
                child.get(i).getId(),
                child.get(i).getDateDay(), 
                child.get(i).getDateMonth(),
                child.get(i).getDateYear(),
                child.get(i).getEnterHour(), 
                child.get(i).getBasicSec(), 
                child.get(i).getExtra0(),
                child.get(i).getExtra1(), 
                child.get(i).getExtra2());
                temp.add(m1);       
                fullList.put(temp, temp);
        }
    }

错误:

8-22 20:51:06.596: E/AndroidRuntime(3448): FATAL EXCEPTION: main
08-22 20:51:06.596: E/AndroidRuntime(3448): java.lang.NullPointerException
08-22 20:51:06.596: E/AndroidRuntime(3448):     at com.bib.workclocks.adapters.ExpandableListCustom.getGroupCount(ExpandableListCustom.java:197)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.widget.ExpandableListConnector.getCount(ExpandableListConnector.java:399)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.widget.ListView.setAdapter(ListView.java:470)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.widget.ExpandableListView.setAdapter(ExpandableListView.java:599)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at com.bibas.workclocks.ListFragment.onCreateView(ListFragment.java:55)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:482)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.View.measure(View.java:16831)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.View.measure(View.java:16831)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:302)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.View.measure(View.java:16831)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5245)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2586)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.View.measure(View.java:16831)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2187)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1350)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1533)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1247)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6355)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.Choreographer.doCallbacks(Choreographer.java:591)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.Choreographer.doFrame(Choreographer.java:561)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.os.Handler.handleCallback(Handler.java:730)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.os.Looper.loop(Looper.java:137)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at android.app.ActivityThread.main(ActivityThread.java:5419)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at java.lang.reflect.Method.invokeNative(Native Method)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at java.lang.reflect.Method.invoke(Method.java:525)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
08-22 20:51:06.596: E/AndroidRuntime(3448):     at dalvik.system.NativeStart.main(Native Method)

它在这里崩溃了:

@Override
public int getGroupCount() {
    if(fullList != null){
    return this.fullList.get(child).size();
    }else{
        return 0;
    }
}

1 个答案:

答案 0 :(得分:0)

在检查这些列表的null值后设置适配器

if(fullList != null && temp != null) {
   adapter = new ExpandableListCustom(getActivity(), fullList,temp);
   lv.setAdapter(adapter);
}

如果要显示空列表,请在设置适配器之前在fullList's内创建temp'sonCreateView(...)对象。

相关问题