首页 > 解决方案 > 使用 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();
        }

    }
}}

标签: android

解决方案


推荐阅读