2017-11-11 3 views
0

여러분이 중복되기 전에 모든 곳에서 검색해 보았고 전문 지식이 필요한 지점에 갇혀 있습니다.SearchView with Postexecute Method

doInBackground 메서드에서 데이터를 호출하고 SimpleAdapter에 값을 저장하고 postExecute 메서드에서 해당 어댑터를 my gridView에 할당하려고합니다. 또한 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>(); 

을 꺼내 out of while 루프 나는 NullPointerException을 얻는 것을 멈춘다. 그러나 이것이 첫번째 d를 반복하기 때문에 나에게 도움이되지 않는다. 데이터베이스에서 다음 모든 것들까지. 또한 WebAPI에서 작업해야한다는 것을 알고 있습니다. 이 예외를 제거 할 수있는 방법을 알려주십시오.

감사합니다

그래서 내가 그것을 알아 냈

답변

0

, 나는 가끔 내

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

에서 빈 값을했고이는 Null searchView이 하나 개 Null 값을 처리 할 수 ​​가서는 NullPointerException을 주었기 때문에 .