People help please, I fight already the 2nd day.

I have observed a strange behavior when updating data in the SimpleCursorTreeAdapter. There are two Activity: ActivityButton and ActivityTreeAdapter. The first is the ActivityButton from which we can go to the ActivityTreeAdapter. The functionality of the ActivityTreeAdapter is as follows: The ability to manually create groups, and stuff elements into groups.

The problem is the following: If I write an element to the group for the first time , then when I try to expand the group, the application falls into the error " java.lang.NullPointerException " (all the data is written to).

When you re-enter the ActivityTreeAdapter, everything becomes normal, I see the group I just created, which normally unfolds. In this case, I can normally add new groups and elements without any errors.

That is, you can do this, for example, go to ActivityTreeAdapter to create groups, return to ActivityButton and back to ActivityTreeAdapter where you can create nested elements absolutely perfectly.

I suppose that the problem is in updating the cursor in the program, it is updated two times: first when creating a group, and second when adding an item to a group.

Here are the data from LogicCat:

  • back to back to page .ExpandableListConnector.getView (

Here is the DEBUG:

  • Thread [<1> main] (Suspended (exception NullPointerException))
    ExpandableListView (ListView) .layoutChildren () line: 1662
    ExpandableListView (AbsListView) .onLayout (boolean, int, int, int, int) line: 1147
    ExpandableListView (View) .layout (int, int, int, int) line: 7035
    LinearLayout.setChildFrame (View, int, int, int, int) line: 1249
    LinearLayout.layoutVertical () line: 1125 LinearLayout.onLayout (boolean, int, int, int, int) line: 1042
    LinearLayout (View) .layout (int, int, int, int) line: 7035 FrameLayout.onLayout (boolean, int, int, int, int) line: 333 FrameLayout (View) .layout (int, int, int, int) line: 7035 PhoneWindow $ DecorView (FrameLayout) .onLayout (boolean, int, int, int, int) line: 333
    PhoneWindow $ DecorView (View) .layout (int, int, int, int) line: 7035
    ViewRoot.performTraversals () line: 1045 ViewRoot.handleMessage (Message) line: 1727
    ViewRoot (Handler) .dispatchMessage (Message) line: 99 Looper.loop () line: 123 ActivityThread.main (String []) line: 4627 Method.invokeNative (Object, Object [], Class, Class [], Class, int , boolean) line: not available [native method]
    Method.invoke (Object, Object ...) line: 521
    ZygoteInit $ () line: 868
    ZygoteInit.main (String []) line: 626 NativeStart.main (String []) line: not available [native method]

Here is the code for the ActivityTreeAdapter:

    1 answer 1

    Judging by the logs falls into bindView - intercept ( @override ) bindView and put logs inside it, then it becomes clear why it falls. bindView is the place where the specific View is assigned to the fields of the cursor. Most likely, for some reason, the View from the assigned layout is not picked up.