从SQLite数据库读取数据时出现空对象引用错误排查
分析与解决:SQLite查询时的Null Object Reference错误
你遇到的这个空指针错误(Attempt to invoke virtual method on a null object reference),根源非常清晰——你的db_adapter对象从未被初始化就直接调用了它的方法。
错误原因拆解
在你的fragment_home_left类中,你只声明了数据库适配器变量:
Login_Signup_DB_adapter db_adapter;
但从头到尾都没有给它赋值(也就是没有创建Login_Signup_DB_adapter的实例)。当你在Fetch_user_data()方法中调用db_adapter.getAll_users()时,db_adapter还是null,系统自然会抛出空指针异常。
具体修复步骤
1. 初始化数据库适配器
在Fragment的onCreateView方法中,获取到上下文后,立即初始化db_adapter。如果你的数据库适配器类需要打开连接(通常会有open()方法),也要记得调用:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_main_activity_home_left, container, false); // 初始化数据库适配器(关键!之前缺失的步骤) db_adapter = new Login_Signup_DB_adapter(requireContext()); // 如果你的Login_Signup_DB_adapter类有open方法,打开数据库连接 db_adapter.open(); // 其他控件初始化代码... display_users = (Button)view.findViewById(R.id.button_display_users); display_box = (TextView) view.findViewById(R.id.editText_displayBox); display_users.setOnClickListener(this); return view; }
这里用requireContext()代替getActivity()更安全,因为它会确保上下文非空,避免Fragment detached时的潜在空指针。
2. 关闭数据库连接避免资源泄漏
在Fragment销毁时,记得关闭数据库连接,防止资源泄漏:
@Override public void onDestroy() { super.onDestroy(); if (db_adapter != null) { db_adapter.close(); // 对应open方法的关闭操作 } }
3. 优化Cursor处理(可选但推荐)
处理Cursor时,使用Java的try-with-resources语法可以自动关闭Cursor,避免手动关闭遗漏导致的资源泄漏:
private void Fetch_user_data() { Log.i(TAG, "Fetch_user_data: CALLING FETCH USER DATA METHOD"); try (Cursor cursor = db_adapter.getAll_users()) { Log.i(TAG, "Fetch_user_data: CURSOR RECIEVED SOMETHING"); Display_user_data(cursor); } catch (Exception e) { Log.e(TAG, "Failed to fetch user data", e); Toast.makeText(requireContext(), "Failed to load data", Toast.LENGTH_SHORT).show(); } }
额外检查点
确保你的Login_Signup_DB_adapter类中的getAll_users()方法正确实现,能返回有效的Cursor。比如类似这样的实现:
public Cursor getAll_users() { SQLiteDatabase db = this.getReadableDatabase(); return db.query(USER_TABLE_NAME, null, null, null, null, null, null); }
内容的提问来源于stack exchange,提问作者rishabh kalra
相关产品推荐
相关产品推荐

