带有适配器的片段中的Android NullPointerException
我正在开发一个基于“一个活动-多个片段”模式的应用程序。在本例中,我使用改型从api获取对象列表,现在我想将这些对象放在片段内的Listview中。我正在使用一个适配器来“填充”这个列表视图 调用success()后,应用程序崩溃。这是短日志:带有适配器的片段中的Android NullPointerException,android,listview,android-fragments,adapter,Android,Listview,Android Fragments,Adapter,我正在开发一个基于“一个活动-多个片段”模式的应用程序。在本例中,我使用改型从api获取对象列表,现在我想将这些对象放在片段内的Listview中。我正在使用一个适配器来“填充”这个列表视图 调用success()后,应用程序崩溃。这是短日志: 4-13 19:01:30.647 1968-1968/com.plusplus.i.jongerenparticipatieplatfrom E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com
4-13 19:01:30.647 1968-1968/com.plusplus.i.jongerenparticipatieplatfrom E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.plusplus.i.jongerenparticipatieplatfrom, PID: 1968
java.lang.NullPointerException
at android.view.LayoutInflater.from(LayoutInflater.java:211)
at com.plusplus.i.jongerenparticipatieplatfrom.adapter.DmsAdapter.getView(DmsAdapter.java:58)
at android.widget.AbsListView.obtainView(AbsListView.java:2255)
at android.widget.ListView.makeAndAddView(ListView.java:1790)
at android.widget.ListView.fillDown(ListView.java:691)
at android.widget.ListView.fillFromTop(ListView.java:752)
at android.widget.ListView.layoutChildren(ListView.java:1616)
at android.widget.AbsListView.onLayout(AbsListView.java:2087)...`
我猜是出了什么问题,因为我在OnCreateView()方法中执行所有操作
代码如下:
public class QuestionFragment extends Fragment implements Callback<List<DtoDms>> {
private DmsAdapter dmsAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
dmsAdapter = new DmsAdapter(getActivity());
View rootView = inflater.inflate(R.layout.fragment_question, container, false);
ListView listView = (ListView) rootView.findViewById(R.id.dmsList);
listView.setAdapter(dmsAdapter);
View emptyView = rootView.findViewById(R.id.empty);
listView.setEmptyView(emptyView);
getJppService().getOpenDms(1, this);
return rootView;
}
@Override
public void success(List<DtoDms> dtoDmses, Response response) {
Toast.makeText(getActivity(), "Ok dit werkt al", Toast.LENGTH_LONG).show();
dmsAdapter.setOpenDms(dtoDmses);
}
@Override
public void failure(RetrofitError error) {
Toast.makeText(getActivity(), "Fout", Toast.LENGTH_LONG).show();
}
}
公共类QuestionFragment扩展片段实现回调{
专用DMS适配器;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
dmsAdapter=新的dmsAdapter(getActivity());
视图根视图=充气机。充气(R.layout.fragment\u问题,容器,错误);
ListView ListView=(ListView)rootView.findViewById(R.id.dmsList);
setAdapter(dmsAdapter);
View emptyView=rootView.findviewbyd(R.id.empty);
setEmptyView(emptyView);
getJppService().getOpenDms(1,this);
返回rootView;
}
@凌驾
公共作废成功(列出DTODMSE、响应){
Toast.makeText(getActivity(),“Ok dit werkt al”,Toast.LENGTH_LONG.show();
dmsAdapter.setOpenDms(dtoDmses);
}
@凌驾
公共无效失败(错误){
Toast.makeText(getActivity(),“Fout”,Toast.LENGTH_LONG.show();
}
}
编辑:下面是适配器类
public class DmsAdapter extends BaseAdapter {
private final Context context;
private List<DtoDms> openDms;
public DmsAdapter(Context context) {
this.context = context;
this.openDms = new ArrayList();
}
public void setOpenDms(List<DtoDms> openDms) {
this.openDms = openDms;
notifyDataSetChanged();
}
@Override
public int getCount() {
return openDms.size();
}
@Override
public DtoDms getItem(int position) {
return openDms.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final DtoDms dms = getItem(position);
ViewHolder viewHolder;
if (convertView != null) {
viewHolder = (ViewHolder) convertView.getTag();
} else {
convertView = from(context).inflate(R.layout.dms_item, parent, false);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
}
// viewHolder.dateTextView.setText(new SimpleDateFormat("dd/MM/yyyy").format(dms.getEndDate()));
viewHolder.questionTextView.setText(dms.getQuestion());
viewHolder.extraTextView.setText(dms.getExtraInfo());
return convertView;
}
static class ViewHolder {
TextView dateTextView;
TextView questionTextView;
TextView extraTextView;
public ViewHolder(View view) {
// dateTextView = (TextView) view.findViewById(R.id.dmsDate);
questionTextView = (TextView) view.findViewById(R.id.dmsQuestion);
extraTextView = (TextView) view.findViewById(R.id.dmsExtra);
}
}
公共类DmsAdapter扩展了BaseAdapter{
私人最终语境;
私有列表openDms;
公共DmsAdapter(上下文){
this.context=上下文;
this.openDms=newarraylist();
}
公共void setOpenDms(列出openDms){
this.openDms=openDms;
notifyDataSetChanged();
}
@凌驾
public int getCount(){
返回openDms.size();
}
@凌驾
公共DtoDms getItem(内部位置){
返回openDms.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终DtoDms dms=getItem(位置);
持票人持票人;
if(convertView!=null){
viewHolder=(viewHolder)convertView.getTag();
}否则{
convertView=from(上下文)。充气(R.layout.dms_项,父项,false);
viewHolder=新的viewHolder(转换视图);
convertView.setTag(viewHolder);
}
//viewHolder.dateTextView.setText(新的SimpleDataFormat(“dd/MM/yyyy”).format(dms.getEndDate());
viewHolder.questionTextView.setText(dms.getQuestion());
viewHolder.extraTextView.setText(dms.getExtraInfo());
返回视图;
}
静态类视窗夹{
文本视图日期文本视图;
文本视图问题文本视图;
文本视图外部文本视图;
公共视图持有者(视图){
//dateTextView=(TextView)view.findViewById(R.id.dmsDate);
questionTextView=(TextView)view.findViewById(R.id.dmsQuestion);
extraTextView=(TextView)view.findViewById(R.id.dmsExtra);
}
}
}
编辑2:成功中的断点表示上下文不为空:
提前谢谢 NullPointer似乎发生在DmsAdapter类中(第58行)。请发布更多代码=)您能显示您的DmsAdapter类吗?我已将代码添加到问题中。行convertView=from(context)。充气(R.layout.dms_item,parent,false);对我来说没有意义。您的from(上下文)实现在哪里?或者这是对LayoutInflater.from(上下文)的调用?@MichaelKrause这是对LayoutInflator.from的调用是的