2017-11-11 3 views
0

皆さんが重複する前に、私はどこでも検索し、私はあなたの専門知識が必要なところに固執しています。SearchView with Postexecuteメソッド

私はdoInBackgroundメソッドでデータを呼び出してSimpleAdapterに値を格納していますが、postExecuteメソッドでは、アダプタをmyViewに割り当てています。また、PostExecuteには、私のアダプタをフィルタリングするsearchViewメソッドがあります。

検索で任意の文字を押すと、アプリケーションがクラッシュし、NullPointerExceptionが発生し、AsyncTaskを作成せずに同じスレッドで同じコードを実行すると、このエラーは発生しません。ここDoInBackgroundの私のコードは次のとおりです。

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; 

    } 

、これはpostExecute方法のための私のコードです:

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; 
      } 
     }); 

}

注:私はこの

を取る瞬間
Map<String,String> datanum = new HashMap<String, String>(); 

whileループから私はNullPointerExceptionを取得しなくなりますが、これは最初のdデータベースから次のすべてのデータベースに移動します。 また、私はWebAPIで作業する必要があることを知っています。 この例外を取り除く方法を教えてください。

はあなたに感謝

だから私はそれを考え出した

答えて

0

、私は時々私の

datanum.put("D",rs.getString("DocumentType")); 

で空の値を持っていたし、これはヌルsearchViewは、その1つのNULL値を扱うことができませんでした行き、NullPointerExceptionが与えたので、 。