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