写入数据库时​​域空指针(Realm null pointer when writing to da

2019-10-23 22:56发布

空指针应该很容易解决,但我不明白为什么我得到NullPointerException这里。

public static void updateUserCity(String city, Context context) {
    Realm realm = Realm.getInstance(context);
    realm.beginTransaction();
    RealmQuery<User> query = realm.where(User.class);
    User user = query.findFirst();
    if (user != null) {
        user.setCity(new City(0, city, city)); // here it crashes
    }
    realm.commitTransaction();
}

而我的堆栈跟踪:

 java.lang.NullPointerException
        at io.realm.UserRealmProxy.setCity(UserRealmProxy.java:118)
        at com.ratata.adapters.DatabaseAdapter.updateUserCity(DatabaseAdapter.java:38)
        at com.ratata.services.userManagment.UserManager.updateCity(UserManager.java:30)
        at com.ratata.dialogs.MainTabDialog.updateUserData(MainTabDialog.java:92)
        at com.ratata.dialogs.MainTabDialog.updateTab(MainTabDialog.java:84)
        at com.ratata.dialogs.MainTabDialog.access$000(MainTabDialog.java:32)
        at com.ratata.dialogs.MainTabDialog$2.onClick(MainTabDialog.java:50)
        at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:153)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5103)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)

User是不是null的,所以我应该setCity此对象。 我创造new City与给定的数据。

Answer 1:

这里的问题是new City(0, city, city)是一个独立的对象。 境界会生成一个代理类里面领域使用。 而当比赛setCity在这里,你需要传递一个对象与代理。

你可以试试这个: user.setCity(realm.copyToRealmOrUpdate(new City(0, city, city)));

见文件在这里



Answer 2:

我设法解决这个问题。 Aparently我不能创建新的对象,并将其保存到Realm ,所以我做它的其他方式。

 public static void updateUserCity(String city, Context context) {
    Realm realm = Realm.getInstance(context);
    realm.beginTransaction();
    RealmQuery<User> query = realm.where(User.class);
    User user = query.findFirst();
    City realmCity = user.getCity();
    realmCity.setName(city);
    realmCity.setRepresentativeName(city);
    user.setCity(realmCity);
    realm.commitTransaction();
}


文章来源: Realm null pointer when writing to database