Viele "lange" Requests...

U

Unicate

Erfahrenes Mitglied
57
Hallo alle zusammen!

Wie ich in einem vorherigen Post bereits erwähnte bau ich eine Telefonkontaktsuche.
Dazu habe ich einem EditText einen TextWatcher gegeben, welcher sich immer meldet wenn der Benutzer den Text in dem EditText verändert hat.
Diesen String möchte ich dann zum suchen eines Kontaktes verwenden.
Nun schreibt der Benutzer aber meist schneller als die Datenbank durchsucht werden kann.
d.h.:

Benutzer drückt: U
Datenbank sucht...
Benutzer drückt: N
Datenbank sucht immer noch "U"
Datenbank soll nun nach "UN" suchen


Wie setz ich das geschickt um?
Bisher hatte ich es in anderen Apps immer so gelößt, dass ich solange der erste Suchvorgang noch nicht beendet ist, keinen weiteren Starte. Das finde ich aber nicht sehr schön.
Gibt es da keine bessere Lösung für?
 
Du könntest die Suche erst dann anschmeißen, wenn nach dem letzten Buchstaben etwas Zeit vergangen ist.
 
An wie lange denkst du da?
1 Sekunde? Ist fast zu lang! Wie machen das andere Apps?
Weniger als 1 Sekunde braucht man aber auch nicht zu nehmen, da das durchaus mal ne Sekunde dauern kann.
 
Und wie isses, das Suchergebnis nur dann anzeigen zu lassen (bzw. weitere Ergebnisse), solange kein weitere Buchstabe bei der Suche hinzugekommen ist?
 
Ich hätte eher an ~500msec gedacht.

Das mit der mehrfachen Suche würde ich durch Verwerfen des Ergebnis der alten lösen (wenn die DB da mitmacht).
Jede Tasteneingabe wirft dann einen Thread wie folgt an:

Code:
public void run() {
  mCurrentSearch = this;
  Thread.sleep( 500 );
  if( this!=mCurrentSearch ) return;
  //suche ausführen
  if( this!=mCurrentSearch ) return;
  //treffer anzeigen
}
 
naja ich würde einfach vorm anzeigen des results dann abchecken, ob das aktuelle suchwort, das gleiche ist, wie das von dem ergebnis.

wenn sich das wort geändert hat, verwerfen. wenn nicht, anzeigen.

einen bereits gestarteten task kannst halt nur sehr aufwändig wieder abbrechen.

hab obiges verhalten in einer app integriert und das funktioniert sehr gut
 
Hallo,

in welchen Feldern der Telefonkontaktsuche suchst Du und um wieviel Kontakte geht es?
Was würdest Du von der Idee halten, alle Kontakte bzw. relevanten Felder beim Start der Activity zu laden und in eine z.B. List<KontakteObj> zu speichern, so dass Du diese Liste durchsuchen kannst? Damit sollten Dir Suchergebnisse nach Tastendruck schnell genug zur Verfügung stehen?!

Gruß
Bobert
 
@Bobert:
Genau das mach ich gerade, das schien mir das vernünftigste.
Danke trotzdem
 

Ähnliche Themen

L
Antworten
15
Aufrufe
906
jogimuc
J
S
  • skywalker22
Antworten
1
Aufrufe
171
swa00
swa00
S
Antworten
17
Aufrufe
552
jogimuc
J
Zurück
Oben Unten