Android 使用AutocompleteTextView和BaseAdapter时出现空指针异常

Android 使用AutocompleteTextView和BaseAdapter时出现空指针异常,android,nullpointerexception,autocomplete,baseadapter,Android,Nullpointerexception,Autocomplete,Baseadapter,我有一个AutocompleteTextView,我为此编写了下面的适配器。我想从Web API中获取数据,这可以正常工作,并且我可以从服务器获取数据。下面的代码显示了我在autocompleteTextView上编写文本时出现的以下错误。我调试代码,在调用notifyDataSetChanged和调用getViewMethod后显示此错误。我不知道我有什么问题 另一件事,我从服务器获得一个对象列表(我的意思是像名称、族、id),我只想显示其中的一部分(我的意思是,我想显示名称),为此,我创建了

我有一个
AutocompleteTextView
,我为此编写了下面的适配器。我想从Web API中获取数据,这可以正常工作,并且我可以从服务器获取数据。下面的代码显示了我在
autocompleteTextView
上编写文本时出现的以下错误。我调试代码,在调用
notifyDataSetChanged
和调用
getViewMethod
后显示此错误。我不知道我有什么问题

另一件事,我从服务器获得一个对象列表(我的意思是像名称、族、id),我只想显示其中的一部分(我的意思是,我想显示名称),为此,我创建了一个自定义适配器

我的适配器:

public class DropDownAdapter extends BaseAdapter implements Filterable {
private static final int MAX_RESULTS = 10;
private Context mContext;
private List<TestModel> resultList = new ArrayList<TestModel>();
private boolean placeResults = false;
private Object lockTwo = new Object();
private Object lock = new Object();


public DropDownAdapter(Context context) {
    mContext = context;
}

@Override
public int getCount() {
    return resultList.size();
}

@Override
public Object getItem(int position) {
    return resultList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View view, ViewGroup viewGroup) {
    View v = view;
    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.one_row_dropdown, viewGroup, false);
    }
    TextView textView = v.findViewById(R.id.textview);
    textView.setText(resultList.get(position).code);
    return view;
}


@Override
public Filter getFilter() {

    Filter filter = new Filter() {

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            final FilterResults filterResults = new FilterResults();

            if (constraint == null || constraint.length() == 0) {
                synchronized (lock) {
                    filterResults.values = new ArrayList<String>();
                    filterResults.count = 0;
                }
            } else {
                JSONObject jsonObject = new JSONObject();
                try {
                    jsonObject.put("token", OfflineData.getGUID(mContext));
                    jsonObject.put("code", constraint.toString());
                    jsonObject.put("state", false);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                Type type = new TypeToken<ServiceResult<List<TestModel>>>() {
                }.getType();
                WebService getBranchCodeListWebService = new WebService(AppConstant.URL_LISTINGDATA, "TestMethod", type);
                getBranchCodeListWebService.addOnCompletedCallBack(new WebService.OnCompletedCallBack() {

                    @Override
                    public void onCompletedCallBack(boolean isSucceed, Object returnedObject) {
                        if (isSucceed) {
                            if (returnedObject != null) {
                                ServiceResult<List<TestModel>> response = (ServiceResult<List<TestModel>>) returnedObject;
                                if (response.IsSuccess) {
                                    if (response.Result.size() > 0) {
                                        resultList.clear();
                                        resultList = response.Result;
                                        filterResults.values = resultList;
                                        filterResults.count = resultList.size();
                                    }
                                }
                            }
                        }
                        placeResults = true;
                        synchronized (lockTwo) {
                            lockTwo.notifyAll();
                        }
                    }
                });
                getBranchCodeListWebService.execute(jsonObject);

                while (!placeResults) {
                    synchronized (lockTwo) {
                        try {
                            lockTwo.wait();
                        } catch (InterruptedException ex) {
                        }
                    }
                }
            }
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            if (results != null && results.count > 0) {

                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
        }
    };
    return filter;
}
在MainActivity中创建适配器:

DropDownAdapter-DropDownAdapter=新的DropDownAdapter(此);
setAdapter(dropDownAdapter);
autoCompleteTextView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//转到下一页…或类似的内容
}
});

如果返回的视图不正确,请将
返回视图更改为
返回v

@Override
public View getView(int position, View view, ViewGroup viewGroup) {
    View v = view;
    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.one_row_dropdown, viewGroup, false);
    }
    TextView textView = v.findViewById(R.id.textview);
    textView.setText(resultList.get(position).code);
    return v;
}
您不必每次使用
view
时都指定view,它将在适配器中保存视图的引用,因此您可以删除行
view v=view
并将代码替换为

@Override
public View getView(int position, View view, ViewGroup viewGroup) {
    if (view == null) {
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.one_row_dropdown, viewGroup, false);
    }
    TextView textView = v.findViewById(R.id.textview);
    textView.setText(resultList.get(position).code);
    return view;
}

希望这有帮助…

哪个
TextView
会抛出错误?
DrowDownAdapter.getView
中的
textView
    DropDownAdapter dropDownAdapter=new DropDownAdapter(this);
    autoCompleteTextView.setAdapter(dropDownAdapter);

    autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //go to next page... or anything like this
        }
    });
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
    View v = view;
    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.one_row_dropdown, viewGroup, false);
    }
    TextView textView = v.findViewById(R.id.textview);
    textView.setText(resultList.get(position).code);
    return v;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
    if (view == null) {
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.one_row_dropdown, viewGroup, false);
    }
    TextView textView = v.findViewById(R.id.textview);
    textView.setText(resultList.get(position).code);
    return view;
}