@Neonoviiwolf
Flutter developer

Как заполнить SQLite данными, после создания бд и парсинга файла в Dagger?

Доброго
Есть файд json, при первом запуске приложения нужно создать бд, распарсить файл и записать данные в бд, создание бд лежит в Dagger2. Соответственно это нужно сделать в новом потоке. Как бы вроде я и понимаю что и как, но вот то что бд создаётся в модуле Dagger вводит в затруднение
модуль:
@Module
public class MainAppModule {
    private Context context;

    public MainAppModule(Context context) {
        this.context = context;
    }

    @Singleton
    @Provides //scope is not necessary for parameters stored within the module
    public Context context() {
        return context;
    }

    @Singleton
    @Provides
    public RoomDB provideRoomDB(Context context) {
        RoomDatabase.Builder<RoomDB> roomDatabase = Room.databaseBuilder(context, RoomDB.class, RoomDB.NAME_DB).addCallback(new RoomDatabase.Callback() {
            @Override
            public void onCreate(@NonNull SupportSQLiteDatabase db) {
                super.onCreate(db);
                //тут нужно заполнять бд
            }
        });
        return roomDatabase.build();
    }

    @Singleton
    @Provides
    public CityUserDAO provideCustomMenuDAO(RoomDB roomDB) {
        return roomDB.getCityUserDAO();
    }
}

тут набросал тестовый код парсинга, он работает
public class TempParserJson {
    
    private static final String TAG = "TempParserJson";
    @Inject
    Context context;

    public TempParserJson() {
        MainApp.app().appComponent().inject(this);

        String strJson;
        AssetManager assetManager = context.getAssets();
        try {
            InputStream stream = assetManager.open("city.json");
            int size = stream.available();
            byte[] buffer = new byte[size];
            stream.read(buffer);
            stream.close();
            strJson = new String(buffer, "UTF-8");

            JsonParser parser = new JsonParser();

            Object obj = parser.parse(strJson);
            JsonArray jsonArray = (JsonArray) obj;
            Log.d(TAG, "TempParserJson: " + jsonArray.get(0));

            TempWeather tempWeather = new Gson().fromJson(jsonArray.get(0), TempWeather.class);
            Log.d(TAG, "TempParserJson: " + tempWeather.getId());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


вот и как бы это всё объединить?
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Очевидно, либо нужно получать БД асинхронно и делать парсинг и ложить сразу на другом потоке, либо отдавать пустую БД синхронно, и откладывать парсинг на другой поток.

В любом случае, я считаю, надо абстрагироваться от конкретной БД. В приложении никто не должен знать про нее кроме репозитория.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы