2016-11-05 65 views
5

Próbuję zrobić:Realm.io - Jak używać symboli wieloznacznych% LIKE% dla zapytania

mRealm 
     .where(Contact.class) 
     .equalTo(Contact.NAME, text, Case.INSENSITIVE) 
     .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 

Wynik: Oczekiwany wynik nie spełnił.

mRealm 
     .where(Contact.class) 
     .contains(Contact.NAME, text, Case.INSENSITIVE) 
     .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 

Wynik: Oczekiwany wynik nie spełnił.

Oczekiwany wynik:

mRealm 
     .where(Contact.class) 
     .like(Contact.NAME, text, Case.INSENSITIVE) 
     .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 

Odpowiedz

2

NOWA ODPOWIEDŹ:

Realm 2.3.0+:

public RealmQuery<E> like(String fieldName, 
         String value, 
         Case casing) 

warunkiem, że wartość pola mecze z określonego fragmentu, z symbole wieloznaczne:

  • '*' mecze [0, n] unicode znaki

  • '?' dopasowuje pojedynczy unicode char.

Parametry:

  • fieldName - pole do porównania.

  • value - ciąg znaków wieloznacznych.

  • casing - jak obsługiwać obudowę. Ustawienie tego na Case.INSENSITIVE działa tylko dla znaków Latin-1.

Zwraca: obiekt zapytania.

Zgłasza: IllegalArgumentException - jeśli jeden lub więcej argumentów nie pasuje do klasy lub typu pola.


OLD ODPOWIEDŹ:

mRealm 
    .where(Contact.class) 
    .contains(Contact.NAME, text, Case.INSENSITIVE) 
    .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 

To powinno działać, ale otrzymasz zwrotnego na załączonym RealmChangeListener gdy rzeczywista zapytanie asynchroniczny jest zakończona.

A RealmRecyclerViewAdapter robi to automatycznie od https://github.com/realm/realm-android-adapters.

+0

Chociaż można napotkasz problemy z postaciami Funky według https://realm.io/docs/java/latest/#sorting-and-querying-on-string – EpicPandaForce

+0

Tak, ".contains()" działa dobrze na mojej aplikacji, ale w rzeczywistości muszę przeszukać pola, które są wspólne "Contact.NAME" w tabeli. Np. ABBC, ABBA, CBBC ->% BB% –

+0

... "zawiera (ContactFields.NAME," BB ");'? – EpicPandaForce

3
mRealm 
    .where(Contact.class) 
    .like(Contact.NAME, text, Case.INSENSITIVE) 
    .findAllSortedAsync(Contact.NAME, Sort.ASCENDING); 
+0

Korzystam z klasy classpath ** io.realm: realm-gradle-plugin: 2.1.1 **, której wersji używasz? –

+0

https://github.com/realm/realm-java/issues/3752 LIKE nie jest jeszcze dodany – EpicPandaForce

+1

Został dodany w wersji v2.3.0 – mjosh

Powiązane problemy