НОМЕР Базы данных в файл CSV. Первая загрузка не работает - PullRequest
0 голосов
/ 17 марта 2020

У меня есть объект клиента, CustomerDao, CustomerDataRepository и CustomerViewModel. Я могу экспортировать данные в файл CSV, но мне нужно выполнить функцию экспорта дважды. Может кто-нибудь объяснить, почему?

  1. Клиент Dao

    @Query("SELECT * FROM customer_table")
    Cursor getCursorAll();
    
  2. Хранилище данных клиентов

    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;
          }
      }
    
  3. 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();
          }
    
      }
    
  4. Наконец, функция экспорта

    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! Любая причина почему?

...