猿问

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

我有一个虚拟数据管理器,它将使用 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;


紫衣仙女
浏览 127回答 1
1回答

达令说

您的构造函数 DBManager(Context c)需要一个上下文作为参数,如果您从 Activity 或 Service 类调用此构造函数,它将工作,因为 Activity 和 Service 都是 Context 的子类,因此传递this就足够了。由于ActivityDummyDataManager不处理上下文,您需要从活动传递 Context 或者您可以传递应用程序上下文getApplicationContext()。改变你的方法如下public static ArrayList<ActivityItem> getActivityItemList() {&nbsp; &nbsp; &nbsp; &nbsp; DBManager db = new DBManager(mContext);&nbsp; &nbsp; &nbsp; &nbsp; //rest of your code.}并在调用它时使用合适的活动或应用程序上下文。
随时随地看视频慕课网APP

相关分类

Java
我要回答