SQLite数据库"context"传递给适配器

no9*_*no9 10 sqlite android android-context

我已经按照本教程在我的Android应用程序中使用SQLite数据库.由于我是初学者,我在理解示例中使用的"context"参数时遇到了问题.

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

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

有人可以解释一下吗?

Jay*_*mar 15

将ActivityName.this作为类上下文作为参数传递给适配器类的构造函数ActivityName是调用适配器的Activityclass的名称


ton*_*gil 9

你可以想象上下文定义了sqlite数据库存在的WHERE/WHEN.sqlite数据库本身不存在,它们存在于您的活动范围内,因此存在于您的活动的上下文中.

对于接下来的步骤,你必须明白上下文是一个动态的"事物"(在reallife中,你可以把它想象成某人在这里和现在).上下文是活动及其时刻的个体,就像你现在和现在只属于你和你的一样,随着时间而变化.

如果你从你的活动中调用一个类,那么这就行了(从活动本身传递活动的上下文就可以了 - 就像你对你的好友说的那样:这就是我现在感觉如何).

 public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       Context contextNew = this;
       myClass(contextNew);
Run Code Online (Sandbox Code Playgroud)

一个简单的解决方案(panacea)将在MyActivity中创建一个静态的Context变量(contextVariable),并直接从不通过:MyActivity.contextVariable访问它.但这不起作用,因为当您尝试声明/使用静态Context变量时会出现错误.

因此,如果您计划在未在主要活动中调用的服务中使用sqlite,例如,由广播接收器触发的服务(服务和接收者本身都没有上下文),那么您必须从所述接收器内访问原始应用程序的上下文.

访问原始活动的上下文很简单,但并不明显.

这适用于我(thanx @ZiGi和@Cristian):

import android.app.Service;
import android.content.Context;

public class BatchUploadGpsData extends Service {
    public Context contextNew;

    @Override
    public void onCreate() {
        contextNew = getApplicationContext();
Run Code Online (Sandbox Code Playgroud)

这是每次Android设备连接到WIFI网络时将导航数据上传到Web上的数据库的工作代码的示例.我有一个接收器监听连接变化(作为一个单独的类直接从"Manifest文件"中调用).

我希望这是有道理的,如果你想了解更多细节,请查看 我的这篇文章,其中我有所述接收器的完整(准系统)代码.