我已经跟随this tutorial在我的Android应用中使用SQLite数据库。 由于我是初学者,我在理解示例中使用的“context”参数时遇到了问题。
我想调用适配器并插入/更新/删除不扩展活动的类中的记录,在此示例中代表上下文。
现在我不知道在适配器中传递什么作为上下文,因为我没有从活动中调用适配器。
有人可以解释一下吗?
答案 0 :(得分:14)
将ActivityName.this作为类上下文作为参数传递给适配器类的构造函数 ActivityName是调用适配器的Activityclass的名称
答案 1 :(得分:8)
你可以想象上下文定义了sqlite数据库存在的WHERE / WHEN。 sqlite数据库本身不存在,它们存在于您的活动范围内,因此存在于您的活动的上下文中。
对于接下来的步骤,你必须明白上下文是一个动态的东西" (在reallife你可以把它想象成某人在这里和现在)。上下文是活动及其时刻的个体,就像你现在和现在只属于你和你的一样,随着时间而变化。
如果你从你的活动中调用一个类,那么这就行了(从活动本身传递活动的上下文就可以了 - 就像你对你的好友说的那样:这就是我的感受现在)。
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context contextNew = this;
myClass(contextNew);
一个简单的解决方案(panacea)将在MyActivity中创建一个静态的Context变量(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网络时将导航数据上传到Web上的数据库的工作代码的示例。我有一个接收器监听连接变化(作为一个单独的类直接调用"来自" Manifest文件)。
我希望这是有道理的,如果你想了解更多细节,请查看this post of mine我所拥有的接收器的完整(准确)代码。
答案 2 :(得分:1)
正如您在示例中看到的,传递给ToDoAdapter的上下文。您可以将活动作为上下文或activity.getApplicationContext()传递。阅读上下文here。