2016-08-16 6 views
0

RealmDB을 내 Android Local Storage으로 사용하고 있습니다. 하지만 필터링이 제대로 작동하지 않습니다. 예 : google을 쿼리하면 DBGOOGLE이 표시되면 표시되지 않습니다. 만약 내가 같은 것을 쿼리하면 Google이 나왔습니다. 이름을 잘 입력하지 않으면. 필자의 결과를 필터링하여 필터링하려고했습니다. 모두 소용 없다. 나는 을 내 AutoCompleteTextView에서 사용하도록 확장합니다.영역 안드로이드 DB 필터링

@Override 
    public Filter getFilter() { 
    return new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence charSequence) { 
      return null; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults filterResults) { 
      if (constraint != null) { 
       //String query = constraint.toString().toLowerCase(); 
       mResult = filterStates(constraint.toString()); 
       Log.e(TAG, "" + mResult.size()); 
       notifyDataSetChanged(); 
      } else { 
       notifyDataSetInvalidated(); 
      } 
     } 
    }; 
    } 

    @NonNull 
    private List<RealmOutlet> filterStates(String query) { 
    Realm mRealm = RealmUtils.getRealmInstance(mContext); 
    return mRealm.where(RealmOutlet.class) 
      /*.equalTo("channel", "distributor") 
      .equalTo("isSent", true)*/ 
      .beginGroup() 
      .equalTo("name", query) 
      .or() 
      .contains("name", query) 
      .or() 
      .beginsWith("name", query) 
      .endGroup() 
      .findAll(); 
    } 

답변

2

는이 같은 코드 https://gist.github.com/sdex/83b75ce9c2f2e2654bec로, 내가 반복 새로운 인스턴스를 열고 있지만 당신이

@NonNull 
private List<RealmOutlet> filterStates(String query) { 
Realm mRealm = RealmUtils.getRealmInstance(mContext); 
return mRealm.where(RealmOutlet.class) 
     .contains("name", query, Case.INSENSITIVE) 
     .findAll(); 
} 

@NonNull 
private List<RealmOutlet> filterStates(String query) { 
Realm mRealm = RealmUtils.getRealmInstance(mContext); 
return mRealm.where(RealmOutlet.class) 
     /*.equalTo("channel", "distributor") 
     .equalTo("isSent", true)*/ 
     .beginGroup() 
     .equalTo("name", query) 
     .or() 
     .contains("name", query) 
     .or() 
     .beginsWith("name", query) 
     .endGroup() 
     .findAll(); 
} 

를 교체 할 경우 작동해야한다고 생각 것 같다 고려 다시 나쁜 습관입니다.

+0

작동하지 않습니다. 내 DB에있는 모든 이름이 모두 대문자임을 알았습니다. 그래서'GOOGLE'을 검색하고 싶다면'구글'은 작동하지 않을 것이고'구글'만이 작동하지 않을 것이다'GO'는 당신에게 제안을 보여줄 것입니다. 내가 여기에서 볼 수있는 유일한 해결책은 어쨌든 데이터로 toLowerCase()를 할 수 있다면 –

+0

입니다. 그래서 Case.INSENSITIVE를 지정해야합니다. – EpicPandaForce

+0

정확히. 나는 그것을 추가했다. 그리고 같은 것 –

관련 문제