java - 如何从广播接收器调用 GetAppContext?
问题描述
我正在尝试设置一个应用程序,在其中我从广播接收器更新数据库,但是当我有它的类时,我无法扩展 AppCompatActivity,其中有 getAppContext,需要数据库调用,我该如何克服它?
public class AlarmReceiver extends BroadcastReceiver {
public static AppDatabase database;
@Override
public void onReceive(Context context, Intent intent) {
database = Room.databaseBuilder(getAppContext(), AppDatabase.class, "mydb").
//get app context is red there, "cant resolve method"
allowMainThreadQueries().
build();
UserDAO userDAO = database.getUserDAO();
User user1 = new User();
user1.setId(2);
user1.setName("xDDDD");
user1.setPassword("1234");
userDAO.insert(user1);
}
}
解决方案
你可以:
1-创建一个扩展应用程序类的应用程序类 MyApplication 并将其用作接收器的全局上下文
2-(不保证,您可以尝试)将您在 onReceive 方法中收到的上下文参数转换为 AppCompatActivity 然后调用 getAppContext
提示* 我不推荐在 onReceive 方法中使用数据库代码。最好再做一个服务或者intentservice,让服务来处理数据库代码。
编辑:
首先在主包中创建新类:
public class MyApplication extends Application {
private static Context context;
public void onCreate() {
super.onCreate();
MyApplication.context = getApplicationContext();
}
public static Context getAppContext() {
return MyApplication.context;
}
}
然后在 Android Manifest 文件中,声明以下内容。
<application android:name="your.package.name.MyApplication">
</application>
现在在您的onReceive
方法或任何地方,您都可以调用 MyApplication.getAppContext() 来获取您的应用程序上下文。
推荐阅读
- mysql - 收到错误:加载本地数据被禁用 - 这必须在客户端和服务器上都启用
- python-2.7 - 尽管软件包安装在 virtualenv 中并且在 Google Cloud SDK 中可用,但 Google AppEngine dev_appserver 引发 ImportError
- excel - 使用 VBA 搜索数据数组,一旦找到匹配项,在同一工作簿不同工作表上的矩阵中将其标记为“X”
- git - 理解使用本地仓库的“git checkout”
- javascript - 如何在javascript中访问客户服务器外部网络路径中的文件?
- python - Python 从另一个类导入类
- javascript - Element.append() 生成不必要的列
- css - 按钮周围奇怪的分界线,是什么造成的?
- maven - 在构建 Maven 项目时遇到问题
- javascript - 想让机器人只向特定的人发送消息