In my Application I am Having 1,46,000 Records,while applying paging Library the Data is Loading after 10 - 15 seconds.While applying Filter on the Loaded Records it takes minimum 5-10 seconds to Load.The Filter opearation is quiet good before Paging Library used in my Project.
@Dao class Looks Like This`
@Dao
public abstract class MftDao
{
@Query("SELECT* FROM transaction_master where AC_NO LIKE :acNo and TXN_ID LIKE :txn_id order by TXN_DATE DESC")
public abstract DataSource.Factory<Integer,TransactionMaster> getTotTransactions(String acNo,String txn_id);
}
ViewModel Looks Like this
public class ReportViewModel extends AndroidViewModel {
private MutableLiveData<TransactionMasterFilter> filter = new MutableLiveData<>();
private LiveData<PagedList<TransactionMaster>> transactionMasterList;
public void setFilter(TransactionMasterFilter filter) {
this.filter.setValue(filter);
}
public ReportViewModel(@NonNull Application application) {
super(application);
repository = new Repository(application);
mftDao = MftDataBase.getInstance(application).getMftDao();
}
public void init() {
transactionMasterList = Transformations.switchMap( filter, new Function<TransactionMasterFilter, LiveData<PagedList<TransactionMaster>>>() {
@Override
public LiveData<PagedList<TransactionMaster>> apply(TransactionMasterFilter input)
{
DataSource.Factory<Integer,TransactionMaster> transactionMasterFactory;
PagedList.Config pagedListConfig =
(new PagedList.Config.Builder()).setEnablePlaceholders(true)
.setPrefetchDistance(150)
.setPageSize(50).build();
transactionMasterFactory = mftDao.getTotTransactions(input.acNo,input.Txn_id);
return new LivePagedListBuilder(transactionMasterFactory,pagedListConfig).build();
}
} );
}
public static class TransactionMasterFilter
{
public String Txn_id;
public String acNo;
public void setTxn_id(String txn_id) {
Txn_id = "%"+txn_id+"%";
}
public void setAcNo(String acNo) {
this.acNo = "%"+acNo+"%";
}
public TransactionMasterFilter(String txn_id, String acNo) {
Txn_id = txn_id;
this.acNo = acNo;
}
}
public LiveData<PagedList<TransactionMaster>> getTransactionMasterList() {
return transactionMasterList;
}
}
Finally Activity is
public class DailyReportActivity extends AppCompatActivity {
ActivityDailyReportBinding dailyReportBinding;
List<TransactionMaster> transactionMasterList = new ArrayList<>();
Repository repository;
ReportViewModel reportViewModel;
ReportViewModel.TransactionMasterFilter transactionMasterFilter = new ReportViewModel.TransactionMasterFilter("%%","%%");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
dailyReportBinding = DataBindingUtil.setContentView(this, R.layout.activity_daily_report );
reportViewModel = ViewModelProviders.of(this).get( ReportViewModel.class);
reportViewModel.setFilter(transactionMasterFilter);
reportViewModel.init();
dailyReportBinding.recyclerView.setItemAnimator(new DefaultItemAnimator());
dailyReportBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));
final DailyReportAdapter dailyReportAdapter = new DailyReportAdapter();
dailyReportBinding.recyclerView.setAdapter(dailyReportAdapter);
reportViewModel.getTransactionMasterList().observe( this, new Observer<PagedList<TransactionMaster>>() {
@Override
public void onChanged(PagedList<TransactionMaster> transactionMasters) {
Log.e("",String.valueOf(transactionMasters.getLoadedCount()) + ",Tot = "+ transactionMasters.size());
dailyReportAdapter.submitList(transactionMasters);
}
});
dailyReportBinding.acNoAutoCompleteTextView.addTextChangedListener( new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
String acNo = dailyReportBinding.acNoAutoCompleteTextView.getText().toString();
transactionMasterFilter.setAcNo(acNo);
reportViewModel.setFilter(transactionMasterFilter);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
I tried a lot to find the solution,but i didn't get it.Am I need to add indexes Or The Procedure to observe the LiveData is totally wrong? . Please Give me suggetions ,Thank you for your time