1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Viele "lange" Requests...

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Unicate, 06.01.2012.

  1. Unicate, 06.01.2012 #1
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    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?
     
  2. DieGoldeneMitte, 06.01.2012 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Du könntest die Suche erst dann anschmeißen, wenn nach dem letzten Buchstaben etwas Zeit vergangen ist.
     
  3. Unicate, 06.01.2012 #3
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    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.
     
  4. JanF, 06.01.2012 #4
    JanF

    JanF Android-Experte

    Beiträge:
    594
    Erhaltene Danke:
    79
    Registriert seit:
    31.03.2011
    Und wie isses, das Suchergebnis nur dann anzeigen zu lassen (bzw. weitere Ergebnisse), solange kein weitere Buchstabe bei der Suche hinzugekommen ist?
     
  5. DieGoldeneMitte, 06.01.2012 #5
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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
    }
    
     
  6. swordi, 06.01.2012 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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
     
  7. Bobert, 06.01.2012 #7
    Bobert

    Bobert Erfahrener Benutzer

    Beiträge:
    161
    Erhaltene Danke:
    15
    Registriert seit:
    21.11.2010
    Phone:
    Nexus S
    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
     
  8. Unicate, 06.01.2012 #8
    Unicate

    Unicate Threadstarter Android-Experte

    Beiträge:
    473
    Erhaltene Danke:
    57
    Registriert seit:
    09.08.2010
    @Bobert:
    Genau das mach ich gerade, das schien mir das vernünftigste.
    Danke trotzdem
     

Diese Seite empfehlen