2017-11-11 2 views
0

Bevor Sie es kopieren, habe ich überall gesucht und ich bin an einem Punkt fest, wo ich Ihre Expertise benötigen.SearchView mit GridView in der Postexecute-Methode

Ich rufe meine Daten in einer doInBackground-Methode auf und speichere die Werte in einem SimpleAdapter. In der postExecute-Methode weise ich den Adapter meiner gridView zu. Und auch in der PostExecute habe ich eine searchView-Methode, die meinen Adapter filtert.

Jetzt, wenn ich irgendeinen Buchstaben in der Suche drücke, stürzt meine App mit einer NullPointerException ab und wenn derselbe Code auf demselben Thread läuft, ohne eine AsyncTask zu machen, bekomme ich diesen Fehler nicht. Hier ist mein Code von 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; 

    } 

und dies ist mein Code für PostExecute Methode:

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

}

HINWEIS: der Moment, den ich nehme diesen

Map<String,String> datanum = new HashMap<String, String>(); 

out of while loop stoppe ich die NullPointerException ABER das hilft mir nicht, weil es dann wiederholt die 1. d ata von der Datenbank zu allen folgenden. Auch ich weiß, dass ich mit WebAPI arbeiten sollte und ich tue das Seite an Seite. Bitte helfen Sie mir, wie ich diese Ausnahme entfernen kann.

DANKE

Antwort

0

Also habe ich es aus, ich hatte manchmal einen leeren Wert in meinem

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

und weil dies ging die Null Suche nicht, dass ein Nullwert umgehen konnte und gab eine Nullpointer .

Verwandte Themen