您可以想象上下文定义了 sqlite 数据库存在的位置/时间。 sqlite 数据库本身并不存在,它们存在于您的活动范围内,因此存在于您的活动的上下文中。
对于接下来的步骤,您必须了解上下文是动态的“事物”(在现实生活中,您可以将其想象为某人的此时此地)。上下文对于活动和它的时刻是个体的,就像你的此时此地是你的和你的,并且随着时间的推移而变化。
如果您从活动中调用一个类,那么这可以解决问题(从活动本身传递活动的上下文是可以的 - 有点像您对您的伙伴说:这就是我现在的感觉)。
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context contextNew = this;
myClass(contextNew);
一个简单的全方位解决方案(灵丹妙药)是在 MyActivity 中创建一个静态上下文变量(contextVariable)并直接从没有通过 MyActivity.contextVariable 访问它。但这不起作用,因为当您尝试声明/使用静态 Context 变量时会出现错误。
因此,如果您计划在一个服务中使用 sqlite,而该服务不是从主活动中调用的,例如,由广播接收器触发的服务(服务和接收器本身都没有上下文),那么您必须从所述接收器中访问原始应用程序的上下文。
访问原始活动的上下文很简单,但远非显而易见。
这对我有用(谢谢@ZiGi 和@Cristian):
import android.app.Service;
import android.content.Context;
public class BatchUploadGpsData extends Service {
public Context contextNew;
@Override
public void onCreate() {
contextNew = getApplicationContext();
这是一个工作代码示例,每次 android 设备连接到 WIFI 网络时,它会将导航数据上传到网络上的数据库。我有一个接收器监听连接变化(作为一个单独的类存在,直接称为“来自”清单文件)。
我希望这是有道理的,如果您想了解更多详细信息,请查看this post of mine,我有该接收器的完整(准系统)代码。