OrmLiteBaseActivity 与 AppCompatActivity?

OrmLiteBaseActivity vs. AppCompatActivity?

我正在尝试在我的应用程序中使用 ORMLite(因为显然我自己编写所有 CRUD 方法是 "harder not smarter" 的开发方式),但我 运行 遇到了一个问题:很多我看到的示例项目有扩展 OrmLiteBaseActivity 的活动。通常我的活动扩展 AppCompatActivity。

这会成为一个问题吗? OrmLiteBaseActivity 是否在任何地方扩展 AppCompatActivity?或者,如果我使用 ORMLite,是否必须牺牲 AppCompat?

我不熟悉 ORMLite,但是我不建议放弃 AppCompat 以支持 ORMLite。那你能做什么?

通过查看 ORMLiteBaseActivity 的源代码,您可以看到此 class 扩展了 Activity 而不是 AppCompatActivity,这对于库来说基本上是有意义的。此外,您可以看到 class 没有做太多事情。

所以选项 #1 不要使用 ORMLiteBaseActivity 或选项 #2 为您的应用程序创建一个自己的基础 Activity 扩展 AppCompatActivity 并且与 ORMLiteBase 做同样的事情Activity。换句话说:可以选择在您的项目中复制 class 并简单地替换 extends 部分。

至于2021年,其实可以做得更好。所以你不应该为了 OrmLiteBaseActivity 而牺牲 AppCompatActivity,你可以同时使用它们。

首先,导入OpenHelperManager:

import com.j256.ormlite.android.apptools.OpenHelperManager;

在您的 activity

中定义对象
private DatabaseHelper databaseHelper = null;

使用以下 getHelperMethod

private DatabaseHelper getHelper() {
    if (databaseHelper == null) {
        databaseHelper = OpenHelperManager.getHelper(this, DatabaseHelper.class);
        // we don't need  the following line that much
        // databaseHelper.getWritableDatabase(); // explicitly calls onCreate method of DatabaseHelper 
        //where you create tables for example, again it will be called anyway
    }
    return databaseHelper;
}

重写 AppCompatActivity 的 OnDestroy 以在 activity 完成后释放资源

 @Override
protected void onDestroy() {
    super.onDestroy();
    if (databaseHelper != null) {
        OpenHelperManager.releaseHelper();
        databaseHelper = null;
    }
}

所以在我的案例中,您可以从 activity 调用 DatabaseHelper 的任何方法 listAllEntries() ,如下所示:

getHelper().listAllEntries();