在Postexecute方法中使用GridView进行SearchView

时间:2017-11-11 12:15:04

标签: android gridview while-loop android-adapter searchview

在你们复制之前,我已经到处寻找它,而我却陷入了需要你专业知识的地步。

我在doInBackground方法中调用我的数据并将值存储在SimpleAdapter中。在postExecute方法中,我将适配器分配给我的gridView。而且在PostExecute中我有一个过滤我的适配器的searchView方法。

现在,当我在搜索中按任何字母时,我的应用程序崩溃时出现NullPointerException,如果我在相同的线程上运行相同的代码而不进行AsyncTask,则不会出现此错误。这是我的DoInBackground代码:

git

这是我的postExecute方法代码:

protected Void doInBackground(Void... voids) {

        try{
            connect = CONN(un, passwords, db, ip);
            String StoredProc = "{call pro.DocumentDelivery_inst_update_delete(?,?)}";
            callableStatement=connect.prepareCall(StoredProc);
            callableStatement.setString(1, "Select");
            callableStatement.setString(2, MainActivity.usernam);
            rs = callableStatement.executeQuery();

            while(rs.next()){
                Map<String,String> datanum = new HashMap<String, String>();
                datanum.put("B",rs.getString("FullName"));
                datanum.put("C",rs.getString("Name"));
                datanum.put("D",rs.getString("DocumentType"));
                datanum.put("A",rs.getString("Id"));
                datanum.put("E",rs.getString("TaskType"));
                datanum.put("F",rs.getString("Comments"));
                datanum.put("G",rs.getString("Tasktime"));
                datanum.put("H",rs.getString("Priority"));
                datanum.put("I",rs.getString("Telephone"));
                data.add(datanum);
            }

            String [] from = {"A","B","C","D","E","F","G","H","I"};
            int[] views = {R.id.doc_grid_t4,R.id.doc_grid_t1, R.id.doc_grid_t2,R.id.doc_grid_t3,R.id.doc_grid_t5,R.id.doc_grid_t6,R.id.doc_grid_t7,R.id.doc_grid_t8,R.id.doc_grid_t9};
            ADA = new SimpleAdapter(document_Pro_List.this,data,R.layout.custom_pro_document_view, from, views);


            synchronized (this) {
                int counter = 0;
                while(counter<=4){
                    this.wait(100);
                    counter++;
                    publishProgress(counter*25);
                }
            }
        }
        catch (InterruptedException | SQLException e){
            e.printStackTrace();
        }
        return null;

    }

}

注意:我拿出这个

的那一刻
protected void onPostExecute(Void result){
        sv = (SearchView) findViewById(R.id.searchView);
        progressDialog.dismiss();
        gridView.setAdapter(ADA);
        sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String query) {
                ADA.getFilter().filter(query);
                //ADA.notifyDataSetChanged();
                return false;
            }
        });

out of while循环我停止获取NullPointerException但是这对我没有帮助,因为它然后将数据库中的第一个数据重复到下一个数据。 我也知道我应该和WebAPI一起工作,而且我正在并肩地做这件事。 请帮我解决一下如何删除此异常。

谢谢你

1 个答案:

答案 0 :(得分:0)

所以我想通了,我的

中有时候有一个空值
datanum.put("D",rs.getString("DocumentType"));

因为这个Null,所以searchView无法处理那个Null值并给出了NullPointerException。