【问题标题】:SQLite Database "context" passed to adapterSQLite 数据库“上下文”传递给适配器
【发布时间】:2011-05-04 07:25:22
【问题描述】:

我已关注this tutorial 在我的 android 应用程序中使用 SQLite db。 由于我是初学者,我在理解示例中使用的“上下文”参数时遇到了问题。

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

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

有人可以解释一下吗?

【问题讨论】:

  • 你能显示一些代码吗?
  • 代码发布在我使用的示例链接中。

标签: android sqlite android-context


【解决方案1】:

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

【讨论】:

  • 问题是我没有从活动中调用适配器......所以唯一的方法是将活动一直传递给适配器?还是我可以以某种静态方式调用上下文?
  • thanx JayDeep,将接受您的回答,以便您获得声誉 :)
【解决方案2】:

您可以想象上下文定义了 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,我有该接收器的完整(准系统)代码。

【讨论】:

  • ps:出于安全原因,sqlite db 仅存在于应用程序的沙箱中,因此您必须首先访问该沙箱,也就是 CONTEXT。
【解决方案3】:

正如您在示例中看到的,有一个上下文传递给 ToDoAdapter。您可以将活动作为上下文或 activity.getApplicationContext() 传递。阅读上下文here

【讨论】:

  • 感谢弗拉基米尔。它开始变得有意义......我将从我的活动类中传递上下文......
猜你喜欢
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多