为了账号安全,请及时绑定邮箱和手机立即绑定

无法获得数据库连接,因为我无法将上下文传递给 DBManager

无法获得数据库连接,因为我无法将上下文传递给 DBManager

紫衣仙女 2022-07-14 10:38:43
我有一个虚拟数据管理器,它将使用 SQLite 数据库的内容填充 ArrayList。当我尝试创建数据库对象时,我收到一条错误消息,指出无法从静态上下文中引用“com.example.listview.manager.ActivityDummyDataManager.this”。package com.example.listview.manager;import android.database.Cursor;import com.example.listview.DBManager;import com.example.listview.model.ActivityItem;import java.util.ArrayList;public class ActivityDummyDataManager {    public static ArrayList<ActivityItem> getActivityItemList() {        DBManager db = new DBManager(this);        Cursor cursor = db.fetch();        ArrayList<com.example.listview.model.ActivityItem> list = new ArrayList<>();        while (cursor.moveToNext()) {            int index;            index = cursor.getColumnIndexOrThrow("id");            Long id = cursor.getLong(index);            index = cursor.getColumnIndexOrThrow("activity");            String activity = cursor.getString(index);            index = cursor.getColumnIndexOrThrow("description");            String description = cursor.getString(index);            index = cursor.getColumnIndexOrThrow("description");            String date = cursor.getString(index);            ActivityItem item = new ActivityItem();            item.setId(id);            item.setActivity(activity);            item.setDescription(description);            item.setDate(date);            list.add(item);        }        return list;    }}我有一个 DBManager 类,我通常会使用 DBManager db = new DBManager(this) 访问,但由于某种原因,这不适用于此类。package com.example.listview;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.util.Log;
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

您的构造函数 DBManager(Context c)需要一个上下文作为参数,如果您从 Activity 或 Service 类调用此构造函数,它将工作,因为 Activity 和 Service 都是 Context 的子类,因此传递this就足够了。由于ActivityDummyDataManager不处理上下文,您需要从活动传递 Context 或者您可以传递应用程序上下文getApplicationContext()。


改变你的方法如下


public static ArrayList<ActivityItem> getActivityItemList() {

        DBManager db = new DBManager(mContext);

        //rest of your code.

}

并在调用它时使用合适的活动或应用程序上下文。


查看完整回答
反对 回复 2022-07-14
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号