android - 使用 SearchView 进行搜索时出现 Android 列表视图错误
问题描述
列表生成成功,但是当我尝试使用搜索视图进行过滤时出现此错误。就在类型一之后,后来得到了这个错误。
收到此错误
Process: com.galaxybd.eams, PID: 7836
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at com.galaxybd.eams.test.AD.getCount(AD.java:35)
at android.widget.AdapterView$AdapterDataSetObserver.onChanged(AdapterView.java:811)
at android.widget.AbsListView$AdapterDataSetObserver.onChanged(AbsListView.java:6140)
at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
at android.widget.BaseAdapter.notifyDataSetChanged(BaseAdapter.java:50)
at com.galaxybd.eams.test.AD$ValueFilter.publishResults(AD.java:102)
at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:282)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
列表生成成功,但是当我尝试使用搜索视图进行过滤时出现此错误。就在类型一之后,后来得到了这个错误。
适配器
public class AD extends BaseAdapter implements Filterable {
private Context context;
private List<DM> beanList;
private LayoutInflater inflater;
List<DM> mStringFilterList;
ValueFilter valueFilter;
public AD(Context context, List<DM> beanList) {
// TODO Auto-generated constructor stub
this.context = context;
this.beanList = beanList;
mStringFilterList = beanList;
}
@Override
public int getCount() {
return beanList.size();
}
@Override
public Object getItem(int i) {
return beanList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (inflater == null) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
if (view == null) {
view = inflater.inflate(R.layout.row_tlist, null);
}
TextView tvName= view.findViewById(R.id.tvName);
TextView tvDesig= view.findViewById(R.id.tvDesig);
TextView tvCompany= view.findViewById(R.id.tvCompany);
DM bean = beanList.get(i);
tvName.setText(bean.getDmName());
tvDesig.setText(bean.getDmDesig());
tvCompany.setText(bean.getDmCom());
return view;
}
@Override
public Filter getFilter() {
if (valueFilter == null) {
valueFilter = new ValueFilter();
}
return valueFilter;
}
private class ValueFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<DM> filterList = new ArrayList<DM>();
for (int i = 0; i < mStringFilterList.size(); i++) {
if ((mStringFilterList.get(i).getDmName().toUpperCase()).contains(constraint.toString().toUpperCase())) {
DM bean = new DM(mStringFilterList.get(i).getDmName(), mStringFilterList.get(i).getDmDesig(), mStringFilterList.get(i).getDmCom());
filterList.add(bean);
}
}
results.count = filterList.size();
results.values = filterList;
} else {
results.count = mStringFilterList.size();
results.values = mStringFilterList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
beanList = (ArrayList<DM>) results.values;
notifyDataSetChanged();
}
}}
列表生成成功,但是当我尝试使用搜索视图进行过滤时出现此错误。就在类型一之后,后来得到了这个错误。
数据模型
public class DM {
String dmName,dmDesig,dmCom;
public DM(String dmName, String dmDesig, String dmCom) {
this.dmName = dmName;
this.dmDesig = dmDesig;
this.dmCom = dmCom;
}
public String getDmName() {
return dmName;
}
public void setDmName(String dmName) {
this.dmName = dmName;
}
public String getDmDesig() {
return dmDesig;
}
public void setDmDesig(String dmDesig) {
this.dmDesig = dmDesig;
}
public String getDmCom() {
return dmCom;
}
public void setDmCom(String dmCom) {
this.dmCom = dmCom;
}}
列表生成成功,但是当我尝试使用搜索视图进行过滤时出现此错误。就在类型一之后,后来得到了这个错误。
主要活动
public class listtest extends AppCompatActivity {
private SearchView tSearchView;
private ListView tList;
private ArrayList<DM> sARRAYLIST=new ArrayList<>();
private AD ad;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listtest);
tSearchView=findViewById(R.id.tSearchView);
tList=findViewById(R.id.tList);
new LIST_GENARATE().execute();
tSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
if(ad!=null){
ad.getFilter().filter(s);
}
return false;
}
});
}
//AsynTask
private class LIST_GENARATE extends AsyncTask<String, String, String>
{
DM dm;
String qNAME =null;
String qDESIG =null;
String qCOM =null;
private String msg;
final Animation myRotation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.animationfile);
protected void onPreExecute()
{
}
@Override
protected String doInBackground(String... params) {
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@172.30.0.16:1521:GALAXYBD", "GIM", "GALAXYGIM");
Statement st = con.createStatement();
ResultSet lv= st.executeQuery("SELECT INITCAP(CUSTODIAN) NAM,(SELECT INITCAP(EI.DESIG_NAME) FROM GHRMS.EMP_INFO EI WHERE EI.EMP_ID=DD.CUS_ID) DESIG,(SELECT INITCAP(EI.COMPANY_NAME) FROM GHRMS.EMP_INFO EI WHERE EI.EMP_ID=DD.CUS_ID) COMPAN,CUS_ID,(SELECT EI.EMP_CODE FROM GHRMS.EMP_INFO EI WHERE EI.EMP_ID=DD.CUS_ID) EMP_CODE,COUNT(ASSET_ID) AID FROM GIM.DASHBOARD_DATA DD GROUP BY CUSTODIAN,CUS_ID ORDER BY COUNT(ASSET_ID) DESC");
while (lv.next())
{
dm=new DM(qNAME,qDESIG,qCOM);
dm.setDmName(lv.getString(1));
dm.setDmDesig(lv.getString(2));
dm.setDmCom(lv.getString(3));
sARRAYLIST.add(dm);
}
con.close();
st.close();
lv.close();
}
catch (Exception e) {
msg=e.toString();
}
return null;
}
protected void onPostExecute(String result)
{
if (TextUtils.isEmpty(msg))
{
ad=new AD(getApplicationContext(),sARRAYLIST);
tList.setAdapter(ad);
}else
{
SuperToast.create(listtest.this, "Network Error\n"+msg, SuperToast.Duration.EXTRA_LONG, Style.getStyle(Style.RED, SuperToast.Animations.FLYIN)).show();
}
}
}}
解决方案
推荐阅读
- scheme - 如何设计一个从给定列表中的每个数字中减去 2 的函数?
- kotlin - Kotlin,内在数据类型的未解决参考
- angular - 从 BehaviorSubject 中检索多个动态创建的组件的值
- xcode - 如何在 xcode 12.2 中退出“历史编辑器”模式?
- vue.js - 在同一个 div vue.js 中显示 2 个元素
- c - 为什么我在 C 中得到这个双重释放或损坏的回溯错误?
- latex - 当我使用 \begin {figure}[H] 时标题消失
- json - 使用python提取JSON数据并遇到keyerror
- javascript - 当模块是`npm link`时,Vue 3组件初始化不正确
- javascript - 将自定义滚动条 CSS 分配给 div 而不是 body