【问题标题】:Null Pointer Exception using setAdapter with a cursor adapter使用带有光标适配器的 setAdapter 的空指针异常
【发布时间】:2013-08-21 11:29:15
【问题描述】:

我正在尝试使用光标适配器,但是当我调用setAdapter 时出现空指针异常,我无法弄清楚问题所在。代码如下:

主要片段:

public class GroupsFragment extends Fragment {

private ListView mGroupList;
private GroupAdapter mGroupAdapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

    super.onCreateView(inflater, container, savedInstanceState);
    View rootView = inflater.inflate(R.layout.fragment_shedule, container, false);

    return rootView;

}

@Override
public void onActivityCreated(Bundle savedInstanceState) {

    super.onActivityCreated(savedInstanceState);

    GroupsDB databaseHelper = new GroupsDB(getActivity());

    mGroupList = (ListView) getView().findViewById(R.id.listGroup);

    Cursor cursor = databaseHelper.getGroupList();
    mGroupAdapter = new GroupAdapter(getActivity(), cursor, true);

    mGroupList.setAdapter(mGroupAdapter);   //<---NULL POINTER EXCEPTION

    databaseHelper.close();

    Button buttonSend = (Button) getView().findViewById(R.id.AddGroupButton);
    buttonSend.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
             AddGroup();
         }
     });

}

private void AddGroup() {

}

}

返回光标以便仅具有列 GI.GROUP_NAME 的名称的函数

public Cursor getGroupList() {

    SQLiteDatabase db = this.getWritableDatabase();

    Cursor cursor = db.query(true, GI.TABLE_NAME,
                            new String[] { GI._ID , GI.GROUP_NAME },
                            null, null,
                            GI.GROUP_NAME , null, null, null);
    db.close();
    return cursor;      

}

最后是自定义适配器:

public class GroupAdapter extends CursorAdapter {

public GroupAdapter(Context context, Cursor c, Boolean f) {
    super(context, c, f);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView name = (TextView)view.findViewById(R.id.groupItem);
    name.setText(cursor.getString(1));
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View v = inflater.inflate(R.layout.group_list_item, parent, false);
    return v;
}
}

【问题讨论】:

  • onActivityCreated 可能在 onCreateView 之前调用
  • 看起来mGroupList 可能是null。检查您是否拥有正确的id
  • fragment_shedule 是否包含 listGroup?
  • 提供日志并提供带有行号的快照。
  • @codeMagic 'id' 是正确的

标签: java android sqlite nullpointerexception


【解决方案1】:
 mGroupList.setAdapter(mGroupAdapter);

从这一行来看,要么 mGroupList 为空,否则 mGroupAdapter 为空。

你应该检查你的布局文件的 ListView id

否则

分享你的日志猫这将有助于更清楚地理解问题。

SQLiteDatabase db = this.getWritableDatabase();

我认为你应该使用 getReadableDatabase();

这里你只是在 DB 上执行查询。

【讨论】:

  • 它在“onCreateView”中膨胀了错误的布局,谢谢你的回答。
  • 感谢您标记我的答案,因为它会帮助其他人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 2013-07-27
  • 1970-01-01
相关资源
最近更新 更多