У меня есть объект клиента, CustomerDao, CustomerDataRepository и CustomerViewModel. Я могу экспортировать данные в файл CSV, но мне нужно выполнить функцию экспорта дважды. Может кто-нибудь объяснить, почему?
Клиент Dao
@Query("SELECT * FROM customer_table")
Cursor getCursorAll();
Хранилище данных клиентов
public class CustomerDataRepository {
private CustomerDao mCustomerDao;
private Cursor mCursor;
CustomerDataRepository(Application application) {
LaundryRoomDatabase db = LaundryRoomDatabase.getDatabase(application);
mCustomerDao = db.customerDao();
}
Cursor getCursorAll() {
LaundryRoomDatabase.databaseWriteExecutor.execute(() -> {
mCursor = mCustomerDao.getCursorAll();
});
return mCursor;
}
}
Customer View Model
public class CustomerViewModel extends AndroidViewModel {
//Added a private member variable to hold a reference to the repository
private CustomerDataRepository mRepository;
//Implemented a constructor that creates the CustomerRepository.
public CustomerViewModel (Application application) {
super(application);
mRepository = new CustomerDataRepository(application);
}
// get Cursor
public Cursor getCursorAll(){
return mRepository.getCursorAll();
}
}
Наконец, функция экспорта
mCustomerViewModel = new ViewModelProvider(this).get(CustomerViewModel.class);
File exportDir = new File(Environment.getExternalStorageDirectory(), "/ExportData");
if (!exportDir.exists()) {
exportDir.mkdirs();
}
File customerFile = new File(exportDir, "customer" + ".csv");
try {
// export Customer Data
customerFile.createNewFile();
CSVWriter csvWrite = new CSVWriter(new FileWriter(customerFile));
mCustomerCursor = mCustomerViewModel.getCursorAll();
csvWrite.writeNext(mCustomerCursor.getColumnNames());
while (mCustomerCursor.moveToNext()) {
//Which column you want to exprort
String arrStr[] = new String[mCustomerCursor.getColumnCount()];
for (int i = 0; i < mCustomerCursor.getColumnCount(); i++){
arrStr[i] = mCustomerCursor.getString(i);
}
csvWrite.writeNext(arrStr);
}
csvWrite.close();
mCustomerCursor.close();
Toast.makeText(DataTransferActivity.this, "DATA EXPORTED", Toast.LENGTH_SHORT).show();
} catch (Exception sqlEx) {
Log.e("DataTransferActivity", sqlEx.getMessage(), sqlEx);
}
Так что эта функциональность все работает, но мне нужно нажать на кнопка, которая выполняет последний шаг 2x! Любая причина почему?