登录跳转至含ObjectBox Box对象的MainActivity时App崩溃
解决登录后跳转MainActivity因ObjectBox崩溃的问题
嘿,我来帮你搞定这个登录跳转后崩溃的问题!这种情况大概率是ObjectBox的初始化环节出了问题,咱们一步步排查解决:
1. 先确认自定义Application的初始化是否正确
ObjectBox的BoxStore必须在Application的onCreate方法里初始化,而且你的Application类得在Manifest里注册,不然getApplication()拿到的可能不是你自定义的App类,自然拿不到BoxStore。
首先看你的App类代码是不是这样的:
public class App extends Application { private BoxStore boxStore; @Override public void onCreate() { super.onCreate(); // 初始化ObjectBox,这一步不能少 boxStore = MyObjectBox.builder().androidContext(this).build(); } public BoxStore getBoxStore() { return boxStore; } }
然后检查AndroidManifest.xml里有没有注册这个Application:
<application android:name=".App" <!-- 这里必须指定你的自定义Application类,不能漏! --> android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MyApp"> <!-- 你的Activity配置... --> </application>
2. 检查BookEntity类的注解和拼写
你代码里写的是BookEntitiy,是不是拼写错误?正确的应该是BookEntity(少了一个y)?这种拼写错误会导致ObjectBox找不到对应的实体类,直接崩溃。
另外,实体类必须加上@Entity注解,并且要有一个@Id注解的字段,比如:
@Entity public class BookEntity { @Id private long id; // ObjectBox要求必须有一个long类型的@Id字段,默认自增 // 其他字段,比如书名、作者等 private String bookName; private String author; // ObjectBox需要空构造方法 public BookEntity() {} // 其他构造方法和getter/setter }
3. 在MainActivity里加非空判断,避免空指针
就算前面都配置对了,也最好加个非空判断,防止意外情况导致崩溃:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); App app = (App) getApplication(); BoxStore boxStore = app.getBoxStore(); if (boxStore != null) { // 注意这里的类名拼写要和实体类完全一致! bookBox = boxStore.boxFor(BookEntity.class); } else { // 打印日志提示问题,方便排查 Log.e("MainActivity", "BoxStore is null! Please check App class initialization."); // 可以在这里做一些降级处理,比如提示用户重启App } // ButterKnife绑定代码... }
4. 检查ObjectBox的Gradle配置是否完整
如果上面都没问题,那可能是Gradle配置漏了:
- 根目录的
build.gradle里要加ObjectBox的插件依赖:
buildscript { dependencies { // 用最新的版本号,比如3.7.1 classpath "io.objectbox:objectbox-gradle-plugin:3.7.1" } }
- App模块的
build.gradle里要应用ObjectBox插件:
plugins { id 'com.android.application' // 加上这一行 id 'io.objectbox' }
按照上面的步骤排查下来,应该就能解决崩溃问题了!
内容的提问来源于stack exchange,提问作者Vishnu Sookdeo
相关产品推荐
相关产品推荐

