AndroidStudio:fragment里的content怎么写?

我定义了一个数据库DBHelper,创建方法是 DBHelper dbHelper = new DBHelper(context);
在MainActivity了加入四个fragment,现在我想在fragment里加载数据库,content应该填什么?
我填了getActivity().getApplicationContext()、getContent()都不行,都显示 on a null object reference
下面打开数据库SQLiteDatabase dbWrite = dbHelper.getWritableDatabase();都显示失败

MainActivity代码:

public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener, ViewPager.OnPageChangeListener {
    ViewPager viewPager;
    BottomNavigationView bottomNavigationView;
    HomeFragment homeFragment = new HomeFragment();
    CommunityFragment communityFragment = new CommunityFragment();
    MallFragment mallFragment = new MallFragment();
    MineFragment mineFragment = new MineFragment();
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();//初始化
    }
    private void init() {
        //获取页面标签对象
        viewPager = findViewById(R.id.viewPager);
        viewPager.setOnPageChangeListener(this);//添加页面切换监视器
        bottomNavigationView = findViewById(R.id.bottomNavigation);
        bottomNavigationView.setOnNavigationItemSelectedListener(this);//添加导航栏选择监视器
        viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {//给页面添加适配器
            @NonNull
            @Override
            public Fragment getItem(int position) {
                switch(position) {
                    case 0:return homeFragment;
                    case 1:return communityFragment;
                    case 2:return mallFragment;
                    case 3:return mineFragment;
                }
                return null;
            }
            @Override
            public int getCount() {//界面个数
                return 4;
            }
        });
    }
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }
    @Override
    public void onPageSelected(int position) {
        bottomNavigationView.getMenu().getItem(position).setChecked(true);
    }
    @Override
    public void onPageScrollStateChanged(int state) {    }
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        viewPager.setCurrentItem(item.getOrder());
        return true;
    }
}

fragment代码:

public class CommunityFragment extends Fragment {
    // RecommentItem是自定义的类
    List<RecommendItem> list = new ArrayList<RecommendItem>();//存储全部素材
    List<RecommendItem> recommend_list = new ArrayList<RecommendItem>();//存储要显示素材
    DBHelper dbHelper = new DBHelper(getContext());
    RecommendItem video1,video2,video3,video4,video5,video6,video7,video8,video9,video10,video11,video12;

    public CommunityFragment() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_community, container, false);
        // Inflate the layout for this fragment
        return view;
    }
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        init();//创建素材
      
        ListView recommend_viewlist = getActivity().findViewById(R.id.recommend_list);
        // 下面省略了给ListView添加显示和响应的代码
    }
    // 导入素材
    public void init() {
        SQLiteDatabase dbWrite = dbHelper.getWritableDatabase();// 这一句出错,打不开数据库
        dbWrite.execSQL("delete from "+DBHelper.table_WorkTags);
        video1 = new RecommendItem(R.drawable.sports1,"20分钟全身燃脂有氧运动","#运动","#燃脂","");
        dbWrite.execSQL("insert into "+DBHelper.table_WorkTags+" (cover,title,tag1,tag2,tag3) values("+video1.getItemId()+",'"+video1.getItemTitle()+"','"+video1.getTag1()+"','"+video1.getTag2()+"','"+video1.getTag3()+"')");
        video2 = ……// 一直加完所有数据
        dbWrite.close();
        // 将创建的对象加入素材表中
        list.add(video1);list.add(video2);list.add(video3);list.add(video4);list.add(video5);list.add(video6);
        list.add(video7);list.add(video8);list.add(video9);list.add(video10);list.add(video11);list.add(video12);
    }
    // 加入推荐列表
    public void initData() {
        // 符合要求的数据加入推荐列表
    }
}

如果你想在fragment中加载数据库,你需要使用fragment的上下文而不是activity的上下文。在你的fragment中,你可以使用以下代码来获取上下文并加载数据库:
DBHelper dbHelper = new DBHelper(getContext());
在这里,getContext()方法将返回与fragment相关联的上下文。这将确保你在fragment中正确地加载数据库。

content写错了吧 是context吧 fragment添加到activity了吗?估计是生命周期调用的时机有问题。

你不能在外面就实例化DBHelper,这个时候getContext()得到的还是空的。可以在onViewCreated里实例化DBHelper

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
在代码中可以看到,DBHelper对象是在fragment中创建的,因此需要给fragment传递一个上下文context对象。在MainActivity中实例化四个fragment时,可以给每个fragment传递一个上下文对象,即getApplicationContext()。修改后的代码如下:

MainActivity中实例化fragment:

homeFragment = new HomeFragment();
communityFragment = new CommunityFragment(getApplicationContext());//给CommunityFragment传递上下文对象
mallFragment = new MallFragment(getApplicationContext());//给MallFragment传递上下文对象
mineFragment = new MineFragment(getApplicationContext());//给MineFragment传递上下文对象

CommunityFragment修改为:

public class CommunityFragment extends Fragment {
    // RecommentItem是自定义的类
    List<RecommendItem> list = new ArrayList<RecommendItem>();//存储全部素材
    List<RecommendItem> recommend_list = new ArrayList<RecommendItem>();//存储要显示素材
    private Context mContext;
    DBHelper dbHelper = null;
    RecommendItem video1,video2,video3,video4,video5,video6,video7,video8,video9,video10,video11,video12;

    public CommunityFragment() {
        // Required empty public constructor
    }
    // 传递上下文对象
    public CommunityFragment(Context context) {
        mContext = context;
        dbHelper = new DBHelper(mContext);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_community, container, false);
        // Inflate the layout for this fragment
        return view;
    }
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        init();//创建素材

        ListView recommend_viewlist = getActivity().findViewById(R.id.recommend_list);
        // 下面省略了给ListView添加显示和响应的代码
    }
    // 导入素材
    public void init() {
        SQLiteDatabase dbWrite = dbHelper.getWritableDatabase();// 这一句出错,打不开数据库
        dbWrite.execSQL("delete from "+DBHelper.table_WorkTags);
        video1 = new RecommendItem(R.drawable.sports1,"20分钟全身燃脂有氧运动","#运动","#燃脂","");
        dbWrite.execSQL("insert into "+DBHelper.table_WorkTags+" (cover,title,tag1,tag2,tag3) values("+video1.getItemId()+",'"+video1.getItemTitle()+"','"+video1.getTag1()+"','"+video1.getTag2()+"','"+video1.getTag3()+"')");
        video2 = ……// 一直加完所有数据
        dbWrite.close();
        // 将创建的对象加入素材表中
        list.add(video1);list.add(video2);list.add(video3);list.add(video4);list.add(video5);list.add(video6);
        list.add(video7);list.add(video8);list.add(video9);list.add(video10);list.add(video11);list.add(video12);
    }
    // 加入推荐列表
    public void initData() {
        // 符合要求的数据加入推荐列表
    }
}

在创建fragment时,将上下文对象传递给fragment的构造函数,然后在fragment中使用传递进来的上下文对象来创建DBHelper对象。

这样就可以在fragment中成功连接数据库了。
如果我的回答解决了您的问题,请采纳!

1、在fragment中,DBHelper dbHelper = new DBHelper(getContext())不应该写在 onActivityCreated ,应该写在在onViewCreated中
2、改完后你报错是因为你想要删除一个不存在的表,所以报错了。删除表应该这样写 DROP TABLE IF EXISTS 表名;
3、你后面insert语句报错是因为,你把表删除后并没有新建表,插入数据时表不存在所以报错,因此你需要新建表