0

i want to use class that extends realm object as regular class, but there's exception in my getFilter()

ThrowingException 8, Realm accessed from incorrect thread. in /Users/cm/Realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_OsResults.cpp line 157, . Exception has been thrown: Realm accessed from incorrect thread. in /Users/cm/Realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_OsResults.cpp line 157

This is my adapter

List<ProductRealm> productsList, productsFiltered;
Context context;

public ProductAdapter(List<ProductRealm> productsList, Context context) {
    this.productsList = productsList;
    this.context = context;
}

@Override
public Filter getFilter() {
    Filter filter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {
            String charString = charSequence.toString();
            if (charString.isEmpty()) {
                productsFiltered = productsList;
            } else {
                List<ProductRealm> filteredList = new ArrayList<>();
                for (ProductRealm row : productsList) {
                    if (row.getName().toLowerCase().contains(charString.toLowerCase())) {
                        filteredList.add(row);
                    }
                }

                productsFiltered = filteredList;
            }

            FilterResults filterResults = new FilterResults();
            filterResults.values = productsFiltered;
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
            notifyDataSetChanged();
        }
    };

    return filter;
}

This is in my fragment

viewModel.productsList.observe(this, new Observer<List<ProductRealm>>() {
        @Override
        public void onChanged(@Nullable List<ProductRealm> productRealms) {
            productAdapter = new ProductAdapter(viewModel.productsList.getValue(), getContext());
            rvProduct.setAdapter(productAdapter);
        }
    });

view model

public MutableLiveData<List<ProductRealm>> productsList = new MutableLiveData<>();

RealmResults<ProductRealm> results = realm.where(ProductRealm.class).findAll();
productsList.setValue(results);
angel
  • 13
  • 4

1 Answers1

0

You can use a class that extends RealmObject as regular object, after you change the object to unmanaged realm object.

This can be achieved using the method copyFromRealm as described in the documentation https://realm.io/docs/java/latest/api/io/realm/Realm.html#copyFromRealm-E-

Ch Vas
  • 993
  • 8
  • 10