向Firebase Realtime Database插入数据时触发空对象引用异常
解决Firebase Realtime Database插入数据时的空对象引用错误
问题定位
从错误日志和代码直接可以判定:myRef这个DatabaseReference对象未完成初始化,调用child()方法时触发了NullPointerException。你的代码直接使用myRef操作数据库,但它没有被赋值为有效的Firebase数据库引用实例。
解决方案
1. 正确初始化DatabaseReference
在activity_register类中,需先获取Firebase Realtime Database实例并初始化myRef,建议在onCreate()方法中完成:
private DatabaseReference myRef; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); // 初始化Firebase数据库引用 FirebaseDatabase database = FirebaseDatabase.getInstance(); myRef = database.getReference(); }
2. 增强空安全校验
在addNewUser方法中,除了判断userID,额外增加对myRef的空判断,避免意外报错:
public void addNewUser(String curr_userId,String email, String username){ User user=new User(email,username); userID=curr_userId; // 同时校验myRef和userID是否为空 if(myRef != null && userID!=null) { Log.d(TAG, "adding user to database, userid-"+userID+"email-"+email+"username"+username); myRef.child(getString(R.string.dbname_users)) .child(userID) .setValue(user); UserAccountSettings settings = new UserAccountSettings(username, username); myRef.child(getString(R.string.dbname_user_account_settings)) .child(userID) .setValue(settings); } else { Log.d(TAG, "myRef或userID为空"); } }
3. 确认Firebase配置有效性
确保项目已完成Firebase基础配置:
google-services.json文件已放置在app目录下- 项目级、模块级
build.gradle已添加Firebase相关依赖
补充说明
从你提供的数据库结构来看,数据路径设计合理,只要myRef完成初始化,就能正常向users和user_account_settings节点插入数据。
内容的提问来源于stack exchange,提问作者Nithin reddy
相关产品推荐
相关产品推荐

