我正在尝试建立一个应用程序,在该应用程序中我从广播接收器更新数据库,但是当我拥有它的类时,我无法扩展其中有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-制作一个Application类MyApplication,以扩展Application类并将其用作接收者的全局上下文
2-(不保证,您可以尝试)将在onReceive方法中收到的context参数转换为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()以获取您的应用程序上下文。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句