Android: обновить значение конструктора и провайдера Dagger2 во время выполнения - PullRequest
0 голосов
/ 16 декабря 2018

Я использую библиотеку dagger2 для своего приложения.тогда я использую Android sqlite для хранения своих данных.проблема в том, что моя версия базы данных может быть обновлена ​​с веб-сервиса / API, когда мое приложение находится в Runtime.Как я знаю, версию базы данных можно обновить, когда я позвоню DatabaseSqlite db = new DatabaseSqlite (context,version,name_of_database).Но как я могу обновить версию базы данных, если ее версия предоставлена ​​AppModule's class?Могу ли я обновить провайдера в Dagger в Runtime?

, это мой AppModule класс:

public class AppModule {

    @Provides
    @Singleton
    Context provideContext(Application application) {
        return application;
    }

    @Provides
    @Singleton
    ApiHelper provideApiHelper(AppApiHelper appApiHelper) {
        return appApiHelper;
    }

    @Provides
    @Singleton
    DataManager provideDataManager(AppDataManager appDataManager) {
        return appDataManager;
    }

    @Provides
    @DatabaseInfo
    String provideDatabaseName() {
        return AppConstants.DB_NAME;
    }

    @Provides
    @DatabaseInfo
    Integer provideDatabaseVersion(PreferencesHelper preferencesHelper) {
        return preferencesHelper.getVersion();
    } // this is how I update Database Version


    @Provides
    @Singleton
    Gson provideGson() {
        return new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
    }

    @Provides
    @PreferenceInfo
    String providePreferenceName() {
        return AppConstants.PREF_NAME;
    }

    @Provides
    @Singleton
    PreferencesHelper providePreferencesHelper(AppPreferencesHelper appPreferencesHelper) {
        return appPreferencesHelper;
    }

    @Provides
    SchedulerProvider provideSchedulerProvider() {
        return new AppSchedulerProvider();
    }
}

, а это мой DatabaseSqlite класс:

public class DatabaseSqlite extends SQLiteOpenHelper {
private static final String TAG = "DatabaseSqlite";
private Context context;
private ArrayList<Log_version> mlogVersion = null;

@Inject
public DatabaseSqlite(Context context,
                      @DatabaseInfo String dbName,
                      @DatabaseInfo Integer version) {
    super(context, dbName, null, version);
}

public DatabaseSqlite(Context context, int version, ArrayList<Log_version> version_log) {
    super(context, DB_NAME, null, version);
    this.mlog_version = version_log;
    this.context = context;
}

@Override
public void onCreate(SQLiteDatabase db) {
    if (app_version_log != null) {
        for (Log_version dataUpdateModel : Log_version) {
            Log.e(TAG, "onCreate: " + dataUpdateModel.getId());
                db.execSQL(dataUpdateModel.getQuer());
        }
        Log.e(TAG, "onCreate: Finish");

    }
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < newVersion) {
        onCreate(db);
    }
}

это мой Datamanager класс, который обрабатывает зависимости для моего DatabaseSqlite класса:

public class AppDataManager implements DataManager {

private final ApiHelper mApiHelper;

private final Context mContext;

private final Gson mGson;

private final PreferencesHelper mPreferencesHelper;

private DatabaseSqlite  mDatabaseSqlite;
private Insert mInsert;
private Select mSelect;

@Inject
public AppDataManager(Context context, PreferencesHelper preferencesHelper, ApiHelper apiHelper, Gson gson, DatabaseSqlite databaseSqlite,
                      Insert insert, Select select) {
    mContext = context;
    mPreferencesHelper = preferencesHelper;
    mGson = gson;
    mApiHelper = apiHelper;
    mDatabaseSqlite = databaseSqlite;
    mInsert = insert;
    mSelect = select;

}

@Override
public DatabaseSqlite setDatabaseSqlite(Context context, int Version, ArrayList<Lst_App_version_Log> app_version_log) {
    mDatabaseSqlite = new DatabaseSqlite(context, Version, app_version_log);
    return mDatabaseSqlite;
} // I try to pass data into costructor my Database Sqlite

}

, и именно так я пытаюсь обновить версию своей базы данных в своей Деятельности:

 getDataManager().setVersion(itemVersionResponse.getVersion());
        getDataManager().setDatabaseSqlite(context, itemVersionResponse.getVersion(), dataUpdateModels);

Что-то не так, что моя версия базы данных не обновляется?пожалуйста, я надеюсь, что кто-то может сказать мне, где моя ложь.большое спасибо

...