![](/img/trans.png)
[英]How to pass argument to broadcast receiver from an activity that call a service
[英]How to call GetAppContext from Broadcast Receiver?
我正在尝试设置一个应用程序,我从广播接收器更新数据库,但是当我有它的 class 时,我无法扩展其中有 getAppContext 的 AppCompatActivity,需要数据库调用,我该如何克服它?
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- 创建一个应用程序 class MyApplication 扩展应用程序 class 并将其用作接收器的全局上下文
2-(不保证,您可以尝试)将您在 onReceive 方法中收到的上下文参数转换为 AppCompatActivity 然后调用 getAppContext
提示* 我不推荐在 onReceive 方法中使用数据库代码。 最好再做一个服务或者intentservice,让服务来处理数据库代码。
编辑:
首先在您的主 package 中创建新的 class:
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() 来获取应用程序上下文的地方。
而不是getAppContext()
尝试使用如下context
:
database = Room.databaseBuilder(context, AppDatabase.class, "mydb").
...
上下文已经在这里,足以创建和操作数据库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.