SQLite数据库“上下文”传递给适配器

时间:2011-05-04 07:25:23

标签: android sqlite android-context

我已经跟随this tutorial在我的Android应用中使用SQLite数据库。 由于我是初学者,我在理解示例中使用的“context”参数时遇到了问题。

我想调用适配器并插入/更新/删除不扩展活动的类中的记录,在此示例中代表上下文。

现在我不知道在适配器中传递什么作为上下文,因为我没有从活动中调用适配器。

有人可以解释一下吗?

3 个答案:

答案 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